【发布时间】:2011-07-12 18:16:25
【问题描述】:
简而言之,C# 向我抛出“不支持不返回任何键列信息的 SelectCommand 的 UpdateCommand 的动态 SQL 生成”,而有问题的表确实有一个主键(标识,因为它是 MSSQL)。
我的代码如下:
void loaddata()
{
try
{
DS = new DataSet();
sqladapt = new SqlDataAdapter("SELECT servicetag,name,defect,primkey FROM " + Properties.Settings.Default.DBtableLaptops + "", sqlcon);
sqladapt.FillSchema(DS, SchemaType.Source);
sqladapt.Fill(DS);
commandBuilder = new SqlCommandBuilder(sqladapt);
DT = DS.Tables[0];
Laptops_datagridview.DataSource = DT; //I'm using a datagridview to edit the data.
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
void savedata()
{
//Doesn't work yet.
try
{
sqladapt.Update(DS); // <-- Throws the aforementioned error.
sqladapt.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
数据加载等工作正常,添加新行也可以,并保存它。但是每当我更新或删除一行时,它都会引发错误。 Primkey 是我的主键,它是一个自动递增的整数。
我整天都在谷歌搜索,但无济于事,人们通常遇到的问题是一开始没有定义主键,但这里不是这种情况。
任何输入都将不胜感激,我已经进行了大约 6 个小时的猎枪调试。
编辑: 有问题的表的创建语句如下:
CREATE TABLE [dbo].[laptopregistratieDB_laptops](
[Servicetag] [text] NOT NULL,
[Name] [text] NOT NULL,
[Defect] [bit] NOT NULL,
[primkey] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
【问题讨论】:
-
PrimKey 实际上是主键吗? IDENTITY 和 Primary Key 是两个独立的概念。您能否从 Management Studio 编写表格并发布 CREATE TABLE/ALTER TABLE 语句?
-
我不知道它有什么不同,我已经习惯了 MySQL,当我尝试在 MSSQL 中创建数据库时它不起作用,经过一些谷歌搜索后发现我应该使用“标识符” ' 代替..
标签: c# .net sql primary-key dynamic-sql