TableAdapter.Update没有't work

aw48

活跃的成员
已加入
2013年2月9日
留言内容
35
地点
德国
编程经验
10+
你好
我是该板的新手,并且急需解决我的C#应用​​程序问题的方法。

我正在使用Visual c#2008 xpress,sql srver 2005 xpress

我就是做这个的 :

数据集是ItemDataDS

SA.ItemDataDSTableTableAdapters.tblItemDataTableAdapter taItemData;
ItemDataDS ds = new ItemDataDS();
DataTable dt = ds.Tables [tablename];

我创建并填充对象数组ao并执行以下操作:dt.LoadDataRow(ao,true);
当我检查ds(调试)时,我找到了表,并在表中找到了数据

最后我做了:taItemData.Update(ds);

这是没有错误的,但是当我检查数据库表时,没有数据被写入

当我使用数据集设计器添加和更新一条记录时,TableAdapter的插入,更新,选择和删除方法就可以正常工作。
fill()方法也可以使用,因为该记录可以在ds中看到。

有什么建议可以解决我的问题吗?
提前致谢
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
首先要做的是检查Update返回的值。假设未引发异常,则该值表示数据库中受影响的记录数。只有两种可能性:

1. Update返回零,在这种情况下,DataTable不包含该适配器可以保存的任何更改。
2. Update返回一个非零值,在这种情况下,进行了更改并将其保存。

在您的情况下,最有可能是#2,这意味着您在错误的位置或错误的时间查看数据。要了解如何管理本地数据文件以及如何在何处以及何时查找数据,请遵循我签名中的第一个链接。
 

aw48

活跃的成员
已加入
2013年2月9日
留言内容
35
地点
德国
编程经验
10+
感谢您的回复
我不得不道歉,我不知道Update()返回一个值。
有经验的程序员应该不会发生这种情况。
以后我会检查这个。我无法在联机时使用Visual Studio,Visual Studio变得非常糟糕(也许ms正在从我的机器上下载所有错误的内容……哈,哈)
也许与此同时我们可以解决我遇到的第二个问题:
我不能同时使用Visual Studio和SQL Management Studio。缺点是,当我关闭SQLMS并重新打开VS时,它无法连接到数据库。
我要做的是杀死sqlserv-service并重新启动它,一切正常。
也许您对我有个处理建议。
但是今天是星期天,不应过多地忙于个人计算机。
by the way, everytime i do 位置t i get the message that i'm not logged in, though the pageheader say welcome aw48. what i'm i doing wrong ?
 

aw48

活跃的成员
已加入
2013年2月9日
留言内容
35
地点
德国
编程经验
10+
好吧,我会这样做
现在到更新问题:(因为英语不是我的母语,所以我不知道一些调试表达式)
update()实际上返回0,但是数据在表中,或者至少是我看到的方式。
我将光标指向打开树视图的数据集,然后选择表(在这种情况下,只有一个表属于该数据集)。
然后在底部输入“输入数据”,并显示两行数据。
由于除两个主键列以外的所有列均为sql-variant类型(在c#中为System.Object),我测试了另一个完全不具有sql-variant的表,但结果是相同的。
现在,我对一个新项目进行所有测试,因此我认为这不是配置问题。
顺便说一句,我可以检索数据库中当前的所有数据。
弗朗兹
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
您可能需要向我们展示所有相关代码。您还应该注意,您可以随时在DataTable上调用GetChanges以获取仅包含更改的新DataTable,以查看表中是否存在更改以及何时存在更改。您还可以通过指定DataRowState来过滤更改的类型。
 

aw48

活跃的成员
已加入
2013年2月9日
留言内容
35
地点
德国
编程经验
10+
这里是 :

由于所有工作都是由设计人员完成的,因此没有太多代码。

公共局部类Form1:表单
{
公共Form1()
{
InitializeComponent();
}

私人无效pbAddRow_MouseUp(对象发送者,MouseEventArgs e)
{
int n = dsItem.tblItem.Columns.Count;
ao = new Object [n];

ao [0] ="pos";
ao [1] = System.DateTime.Now;
ao [2] ="postext";
ao [3] ="app";

dsItem.tblItem.LoadDataRow(ao,true);

//连接open()和close()我们可以离开ta或
//我们在这里打开()连接,ta将把close()留给我们
taItem.Connection.Open();

int结果= this.taItem.Update(dsItem);

taItem.Connection.Close();
}

Object [] ao;
}

一些细节:
dsItem.tblItem具有4列:名称(PrimaryKey,s10),日期(datetime,exceptsnull),文本(s30,exceptsnull),应用程序(s10,exceptsnull)
与设计师一起,我添加了一行存储在数据库中。
使用那完整的代码,我添加了第二行,在ds中显示如下:

{DBTest.testDBDataSet.tblItemRow}
"app"
{12.02.2013 12:37:18}
"pos"
{tblItem}
"postext"
(值按列标题的字母顺序列出,因此"pos"列第3位。 {tblItem}我不知道。我的猜测是由于主键)

此行未存储!

祝你今天愉快
弗朗兹
 

aw48

活跃的成员
已加入
2013年2月9日
留言内容
35
地点
德国
编程经验
10+
哇 !!!
特鲁里:四封信使我忙了大约两个星期。从来没有想过。
thanx,thanx,thanx
绝对值100分!
弗朗兹
 
最佳 底部