繁体   English   中英

从datagridview更新SQL Server数据库

[英]Update SQL Server database from datagridview

我需要使用SqlDataAdapter在本地PC上更新数据库。 该项目是Windows窗体。 此方法从数据库中选择信息,并返回一个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我确实需要更新表。 我得到一个错误:

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

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

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

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

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

旁注。

  1. 目前尚不清楚为什么要使用static关键字定义所有这些globals变量。 如果没有足够的理由这样做,我建议删除static关键字,只使用类局部私有变量。
  2. 声明时无需初始化SqlDataAdapter,然后在clientSizes方法中再次初始化,只需在方法内部使用初始化即可(当然,您需要确保在调用clientSizes之前,没有其他地方可以使用该适配器)
  3. 您正在调用adapterSize.Fill两次。 同样,不需要第二次呼叫。 DataSet的填充足以读取数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM