强类型Dataset在adapter.Update()时意外错误,只更新本地数据库,不更新服务器数据库
在C#中我添加了一个“基于服务的数据库”文件,叫DB1.mdf,做了一个表,字段Id是主键自增int型,字段name是 nvarchar(50)。手工输入了三条非空记录, 然后添加了一个数据集,再把表拖到数据集中自动生成类,接着写代码,更改表中字段值,最后用Update指命更新强类型Dataset到数据库,可是发现,他并没有更新“服务器资源管理器中的DB1.mdf文件,而是在本应用程序的/bin/debug下生成了一个新的DB1.mdf,运行中以为是更新了服务器,其实没有,每次重新编译后就还是使用的末更新的服务器数据库,一动表记录就在写本地DB1.mdf。头大了,代码如下。namespace 强类型DataSet1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//强类型Dataset制动生成的类
//表名+TableAdapter,表名+DataTable,表名+Row,然后用"解析"来填充类名。
T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
强类型DataSet1.DataSetPersons.T_PersonsDataTable personsTable = adapter.GetData();
personsTable[0].Name = "ccc1";
personsTable[1].Name = "aaa";
personsTable[2].Name = "bbb";
//强类型DataSet无需下面这条
//SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.Update(personsTable);//无法更新服务器的数据库
}
private void button2_Click(object sender, EventArgs e)
{
T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
adapter.Insert("john", 50);、、
}
}
} --------------------编程问答-------------------- C#的内容建议去.net问问 --------------------编程问答-------------------- 跟类型无关,应该是你程序与数据库的连接有问题. --------------------编程问答--------------------
不存在连接问题,表放到数据集中会自动生成配置文件型的连接字串,以及 强类型Dataset类名,查询服务器数据库依然正常,说明我的连接无问题,只是在修改字段值的时候 只修改了本地/bin/debug/DB1.dbf 而服务器的DB1.dbf没变。 --------------------编程问答--------------------
关键是上面标红色的这句话,你自动生成的连接字符串有问题. --------------------编程问答-------------------- 呵呵,刚刚遇到这个为题:
我的也是 adapter.Update(personsTable),没法更新数据库。
解决办法如下:
在Program.cs 中的static void Main()里加如下代码,即可解决,注意加在Application.EnableVisualStyles();前面:
string dataDir = AppDomain.CurrentDomain.BaseDirectory;--------------------编程问答-------------------- 哈哈 ,感谢 。我经常忘记加这段代码 。 --------------------编程问答-------------------- 把 数据库档案的属性选项,改成 Copy if newer 就只会在你有异动数据库时才会盖掉 debug 裹的
if (dataDir.EndsWith(@"\bin\Debug\")
|| dataDir.EndsWith(@"\bin\Release\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}
补充:.NET技术 , C#