获得例外和#34;系统'"附近的语法不正确在使用SqlCommandBuilder时

时间:2018-03-18 02:13:02

标签: c# .net sql-server ado.net

我正在学习SqlCommandbuilder,但是当我尝试实现它时,我得到了一个例外。这是我的代码。

代码段#1 :工作正常

protected void btnGetStudent_Click(object sender, EventArgs e)
{
    string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

    SqlConnection con = new SqlConnection(cs);
    SqlDataAdapter da = new SqlDataAdapter("Select * from tblStudents where ID = @Id", con);
    da.SelectCommand.Parameters.AddWithValue("@Id", txtStudentID.Text);

    DataSet ds = new DataSet();
    da.Fill(ds, "Students"); // now this FILL is very useful as it manages opening of the connection and then executing the command to get the data and the loading it into the dataset and then closes the connection.

    ViewState["SQL_Query"] = da.SelectCommand.ToString();
    ViewState["Data"] = ds;

    if (ds.Tables["Students"].Rows.Count > 0)
    {
        DataRow dr = ds.Tables["Students"].Rows[0];
        txtStudentID.Text = dr["Id"].ToString();
    }    
}

代码段#2 :导致异常:

protected void btnUpdate_Click(object sender, EventArgs e)
{
    string connectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

    SqlConnection con = new SqlConnection(connectionString);
    SqlDataAdapter dataAdapter = new SqlDataAdapter();

    dataAdapter.SelectCommand =
        new SqlCommand((string)ViewState["SQL_Query"], con);
    SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter);

    DataSet ds = (DataSet)ViewState["Data"];
    DataRow dr = ds.Tables["Students"].Rows[0];
    dr["Id"] = txtStudentID.Text;

    int rowsUpdated = dataAdapter.Update(ds, "Students"); // Exception
}

例外:

  

系统'

附近的语法不正确

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:4)

我发现了原因:您关注的视频使用的是.NET 2.0。我怎么知道?

查看SqlCommandBuilder类的文档:

  • .NET 2.0的示例:

    DataSet dataSet = new DataSet();
    adapter.Fill(dataSet, tableName);
    
    //code to modify data in DataSet here
    
    //Without the SqlCommandBuilder this line would fail
    adapter.Update(dataSet, tableName);
    
  • .NET 3.0 +示例:

    DataSet dataSet = new DataSet();
    adapter.Fill(dataSet, tableName);
    
    //code to modify data in DataSet here
    
    builder.GetUpdateCommand();
    
    //Without the SqlCommandBuilder this line would fail
    adapter.Update(dataSet, tableName);
    

它们之间的明显区别是在调用builder.GetUpdateCommand();之前调用adapter.Update,所以你错过了。

那就是说:我建议您切换到至少使用.NET 4.5的教程