gpt4 book ai didi

c# - 在 tableadapter 上执行自定义查询

转载 作者:行者123 更新时间:2023-11-30 17:03:20 27 4
gpt4 key购买 nike

我希望能够针对我拥有的表适配器执行自定义 SQL 查询。是否有可能做到这一点?或者我可以只在数据集设计 View 中的每个表适配器上使用预定义查询吗?

如果我不能这样做,我将如何对表执行 SQL 查询,并将结果显示在绑定(bind)到表适配器的 datagridview 中?

谢谢。

编辑:我没有正确解释自己。我知道如何使用数据集设计器将查询添加到表适配器。我的问题是我需要针对现有表适配器执行自定义 SQL(我动态构建)。

最佳答案

我发布了一条评论,指出了一个使用 VB 的示例,该示例创建了一个扩展 TableAdapter 的类。我将不使用 VB 示例并用 C# 重写它,而是展示如何在不创建扩展 TableAdapter 的类的情况下完成此操作。

基本上创建一个 BackgroundWorker 来执行 sql 查询。你不必,但它会很好。根据用户的输入构建查询字符串。

    private void queryBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
//Initialize sqlconnection
SqlConnection myConnection;

//Convert date in to proper int format to match db
int fromDate = int.Parse(dateTimePickerStartDate.Value.ToString("yyyyMMdd"));
int toDate = int.Parse(dateTimePickerEndDate.Value.ToString("yyyyMMdd"));

//Setup Parameters
SqlParameter paramFromDate;
SqlParameter paramToDate;
SqlParameter paramItemNo;
SqlParameter paramCustomerNo;

//Fill the data using criteria, and throw any errors
try
{
myConnection = new SqlConnection(connectionString);
myConnection.Open();
using (myConnection)
{
using (SqlCommand myCommand = new SqlCommand())
{
//universal where clause stuff
string whereclause = "WHERE ";

//Add date portion
paramFromDate = new SqlParameter();
paramFromDate.ParameterName = "@FromDate";
paramFromDate.Value = fromDate;

paramToDate = new SqlParameter();
paramToDate.ParameterName = "@ToDate";
paramToDate.Value = toDate;

myCommand.Parameters.Add(paramFromDate);
myCommand.Parameters.Add(paramToDate);

whereclause += "(TableName.date BETWEEN @FromDate AND @ToDate)";

//Add item num portion
if (!string.IsNullOrEmpty(itemNo))
{
paramItemNo = new SqlParameter();
paramItemNo.ParameterName = "@ItemNo";
paramItemNo.Value = itemNo;

myCommand.Parameters.Add(paramItemNo);

whereclause += " AND (Tablename.item_no = @ItemNo)";
}

//Add customer number portion
if (!string.IsNullOrEmpty(customerNo))
{
paramCustomerNo = new SqlParameter();
paramCustomerNo.ParameterName = "@CustomerNo";
paramCustomerNo.Value = customerNo;

myCommand.Parameters.Add(paramCustomerNo);

whereclause = whereclause + " AND (Tablename.cus_no = @CustomerNo)";
}


string sqlquery = "SELECT * FROM TableName ";
sqlquery += whereclause;

//MessageBox.Show(sqlquery);

myCommand.CommandText = sqlquery;
myCommand.CommandType = CommandType.Text;
myCommand.Connection = myConnection;

this.exampleTableAdapter.ClearBeforeFill = true;
this.exampleTableAdapter.Adapter.SelectCommand = myCommand;
this.exampleTableAdapter.Adapter.Fill(this.ExampleDataSet.ExampleTable);
}
}
}
catch (System.Exception ex)
{
Console.WriteLine(ex.ToString());
}
}

我个人喜欢编写一个扩展 TableAdapter 的类的想法,但这是回答 OP 问题的一种快速简便的方法。抱歉,花了一年时间:)

关于c# - 在 tableadapter 上执行自定义查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18698665/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com