我有一个包含6列的数据库表.主键是由6列中的5列组成的复合键
我正在尝试使用SqlClient.SqlCommandBuilder.GetDeleteCommand删除行.
但是我收到以下错误:
"System.InvalidOperationException:对于不返回任何键列信息的SelectCommand,不支持DeleteCommand的动态SQL生成."
该SelectCommmand包含表中的所有列:
SELECT TABLENAME.COL1, TABLENAME.COL2, TABLENAME.COL3,
TABLENAME.COL4, TABLENAME.COL5, TABLENAME.COL6
FROM TABLENAME
Run Code Online (Sandbox Code Playgroud)
问题可能是复合键吗?
当我使用一个SqlCommandBuilder推更新/插入/删除服务器,我需要打电话.GetUpdateCommand(),.GetInsertCommand()和.GetDeleteCommand()?
using (var adapter = new SqlDataAdapter("select * from MyTable", _connection))
using (var builder = new SqlCommandBuilder(adapter))
{
adapter.Fill(dt);
//Magic happens
builder.GetUpdateCommand(); //is this line necessary
builder.GetInsertCommand(); //is this line necessary
adapter.Update(dt);
}
Run Code Online (Sandbox Code Playgroud)
我看到有关正确程序的相互矛盾的 例子.我知道没有它可行,但我不知道它是否在幕后做了一些特别的事情.这是必要的还是货物编程?
我知道这是DataGridView的基本功能,但由于某种原因,我无法让它工作.我只希望Windows窗体上的DataGridView在用户单击"保存"按钮时向数据库提交对其进行的任何更改.
我根据DropDownList中用户选择触发的函数填充DataGridView,如下所示:
using (SqlConnection con = new SqlConnection(conString))
{
con.Open();
SqlDataAdapter ruleTableDA = new SqlDataAdapter("SELECT rule.fldFluteType AS [Flute], rule.fldKnife AS [Knife], rule.fldScore AS [Score], rule.fldLowKnife AS [Low Knife], rule.fldMatrixScore AS [Matrix Score], rule.fldMatrix AS [Matrix] FROM dbo.tblRuleTypes rule WHERE rule.fldMachine_ID = '1003'", con);
DataSet ruleTableDS = new DataSet();
ruleTableDA.Fill(ruleTableDS);
RuleTable.DataSource = ruleTableDS.Tables[0];
}
Run Code Online (Sandbox Code Playgroud)
在我的保存功能中,我基本上有以下内容(我已经修剪了一些代码以便达到目的):
using (SqlDataAdapter ruleTableDA = new SqlDataAdapter("SELECT rule.fldFluteType AS [Flute], rule.fldKnife AS [Knife],
rule.fldScore AS [Score], rule.fldLowKnife AS [Low Knife],
rule.fldMatrixScore AS [Matrix Score], rule.fldMatrix AS [Matrix] …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Ado.Net Sql命令从带有日期过滤器的表中选择数据.
SELECT COLUMN1
, COLUMN2
FROM TABLENAME
WHERE DATE_INSERTED > @[User::LastInsertDate]
Run Code Online (Sandbox Code Playgroud)
这两个Date_Inserted和@[User::LastInsertedDate]的类型DateTime.当我尝试在表达式构建器中计算表达式时,得到以下错误;
表达式可能包含无效标记,不完整标记或无效元素,可能格式不正确,或者可能缺少必需元素(如括号)的一部分.
在我用C#编写的应用程序中,我正在编写一个SQL查询.以下是查询
SELECT [Resource No_] where [Resource No_] In (@resources)
Run Code Online (Sandbox Code Playgroud)
@resources 是具有一个或多个一个字符串的用户输入参数.
我的查询失败而没有显示错误
根据我的说法,查询失败,因为@resources正在传递参数跟随
"'123,'124','125'"
Run Code Online (Sandbox Code Playgroud)
(在开头和结尾有两个引号,这是我的查询失败).
[Resource No_]是NVARCHAR数据库中的类型.
谷歌搜索后,我已经找到了一些关于这个主题的帮助,但所有这些都适用[Resource No_] 于类型Integer
我已经定义了2个数据集和2个dataAdapters(每个数据集一个).在创建之后,对于2个dataAdapters中的每一个,我定义了一个SqlCommandBuilder.一切都很好,直到这里.我可以使用dataAdapter1.Update(dataSet1)从数据库添加,修改,擦除非常好.但不按此顺序:擦除,添加,修改.
以下是第一个数据集dataAdapter和sqlCommandBuilder的代码:
string sql = "SELECT * From localitati";
da1 = new System.Data.SqlClient.SqlDataAdapter(sql, con);
da1.Fill(ds1, "localitati");
cmdBuilder1 = new SqlCommandBuilder(da1);
Run Code Online (Sandbox Code Playgroud)
第二个:
sql = "SELECT * From sucursale";
da2 = new System.Data.SqlClient.SqlDataAdapter(sql, con);
da2.Fill(ds2, "sucursale");
//face automat select, insert ,etc !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cmdBuilder2 = new SqlCommandBuilder(da2);
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会发生这种情况?
c# ×4
ado.net ×2
sql-server ×2
.net ×1
dataadapter ×1
datagridview ×1
sqlclient ×1
sqlcommand ×1
ssis ×1
winforms ×1