从datagridview更新SQL Server数据库

时间:2017-04-18 08:38:47

标签: c# sql-server database datagridview

我需要使用SqlDataAdapter在本地PC上更新我的数据库。该项目是Windows Forms。此方法从数据库中选择信息并返回DataTable作为DataGridView的数据源:

    static string querySelect = "select * from [customers_Sizes] where ID_customers = @ID_customers";
    private  DataSet recivedData;
    static public SqlDataAdapter adapterSize = new SqlDataAdapter(querySelect, connectionString);
    SqlCommandBuilder cmdBuilder;
    public DataTable clientSizes(int ID)
    {
        DataTable table = new DataTable();
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            SqlCommand commSelect = new SqlCommand(querySelect, conn);
            commSelect.Parameters.AddWithValue("@ID_customers", ID);
            adapterSize = new SqlDataAdapter(commSelect);
            cmdBuilder = new SqlCommandBuilder(adapterSize);
            recivedData = new DataSet();
            conn.Open();
            adapterSize.Fill(recivedData);
            table = recivedData.Tables[0];
        }
        return table;
    }

此代码用于更新:

public void setNewSizes()
{
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        adapterSize.UpdateCommand = cmdBuilder.GetUpdateCommand();
        conn.Open();
        adapterSize.Update(receivedData.Tables[0]);
    }
}

receivedData中,我确实需要更新表格。我收到一个错误:

  

连接字符串属性尚未初始化

那么,我该如何解决呢?感谢。

1 个答案:

答案 0 :(得分:2)

您正在重新定义 clientSizes 方法中的变量 adapterSize ,有效地隐藏了在类范围内定义的全局变量。
这样,在类范围定义的全局变量没有关于添加到内部变量的参数ID的信息,当您尝试使用它时,会引发异常。

只需删除adapterSize的声明并使用全局变量

// SqlDataAdapter adapterSize = new SqlDataAdapter(commSelect);
adapterSize = new SqlDataAdapter(commSelect);

旁注。

  1. 目前尚不清楚为什么要定义所有那些全局变量 static关键字。如果没有令人信服的理由这样做,我 建议删除static关键字,只需要本地类 私有变量。
  2. 在声明它时不需要初始化SqlDataAdapter,然后再在 clientSizes 方法内部进行初始化,只需使用方法内部的初始化(当然,您需要确保无处使用其他地方)调用 clientSizes
  3. 之前的那个适配器
  4. 您正在调用adapterSize.Fill两次。再次,不需要第二次通话。 DataSet的填充足以读取数据