繁体   English   中英

C#.NET sqlDatabase CommandBuilder 和 DataAdapter:名称“适配器”在当前上下文中不存在

[英]C#.NET sqlDatabase CommandBuilder and DataAdapter: The name 'Adapter' does not exit in the current context

我一直在关注 C#.Net 在线教程。 创建了一个class并为我的 DataAdapter 声明了变量Adapter1

我正在使用带有Adapter1的 CommandBuilder 来更新、保存、删除或将新记录插入数据库。

我遇到的问题是我声明的UpdateDatabase方法似乎看不到变量Adapter1

请看看下面的代码,告诉我我做错了什么。 导致错误的代码位于最底部

private string sql_string;
private string strCon; //This is a write-only property

public string Sql
{
    set { sql_string = value; }
}

public string connection_string
{
    set { strCon = value; }
}

public System.Data.DataSet GetConnection
{
    get { return MyDataSet(); }
}

private System.Data.DataSet MyDataSet()
{
    System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(strCon);
    con.Open();

    System.Data.SqlClient.SqlDataAdapter Adapter1 = new System.Data.SqlClient.SqlDataAdapter(sql_string, con);

    System.Data.DataSet dat_set = new System.Data.DataSet();
    Adapter1.Fill(dat_set, "Table_Data_1");

    con.Close();

    return dat_set;
}

public void UpdateDatabase (System.Data.DataSet ds)
{
    System.Data.SqlClient.SqlCommandBuilder cb = new System.Data.SqlClient.SqlCommandBuilder(Adapter1);
    cb.DataAdapter.Update(ds.Tables[0]);
}

您收到此特定错误的原因是 function UpdateDatabase()的 scope 中没有名为Adapter1的变量。 您可以将您在 function MyDataSet()中声明的局部变量设为成员变量,然后它将在UpdateDatabase()中可见。 但是,这不是最好的方法,因为您将指望使用此帮助程序 class 的代码始终在UpdateDatabase() ZC1C425268E68385D1AB5074C1 之前调用MyDataSet() function ZC1C425268E68385D1AB5074C1得到 null 参考错误)。 如果您想以这种方式构造代码,您应该在您正在构建的 class 的构造函数中初始化您的适配器,这样使用您的库的代码可以确保适配器将始终正确初始化。 如果以这种方式构建代码,则可以将连接字符串作为构造函数参数,而不是只写属性。

一定要继续编写此代码作为练习,但请注意,DataAdapters 和 DataSets 是 .NET 的一个非常古老的部分,并且这个习语在现代数据层中使用得不多。 人们要么使用 ORM(如 EntityFramework),要么直接使用 ADO.NET 命令,如果他们想要控制和效率。 我还要指出,您正在构建的 class 似乎正在尝试扮演 DataAdapter 的角色,因此它在现实生活中没有任何实用性(人们只会直接使用SqlDataAdapter而不是您的类)。

暂无
暂无

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

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