我需要用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);

旁注。
不清楚为什么要用
静态关键字。如果没有令人信服的理由,我
建议删除static关键字,只使用类local
私有变量。
在声明sqldataadapter时,无需初始化它,然后在clientsize方法中再次初始化,只需在方法中使用初始化(当然,在调用clientsize之前,您需要确保在其他任何地方都不使用该适配器
您正在调用适配器大小。填充两次。同样,不需要第二个电话。数据集的填充足以读取数据

10-04 12:29
查看更多