问题描述
- SCOPE_IDENTITY() AS INT;返回值的问题,求请前辈们教诲。感激不尽,小子拜谢。
-
比如说我里面有三行数据我添加商品如图
添加成功之后
到VS调试。。如图点击右键添加商品菜单之后
调试第一次添加成功(添加了几项)
但是问题来了随后删除不了添加的商品找不到tag属性保存的Id。如图
我试着再次调试发现可以删除了(删除完)。
让后我用f5调试发现其实在添加ID是保存了的。
最大问题来了。在进行之前的操作之后。再次调试添加就会发生我最为疑惑事。
通过select CAST(SCOPE_IDENTITY() AS INT)返回值
tag的值无论进行多少次添加都是数字1。不知道为什么。各位前辈求解??拜谢
VS代码如下:
private void Form2_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt = DBHelper.query("select CardsId,CardsName from Cards");
for (int i = 0; i < dt.Rows.Count; i++)
{
treeView1.Nodes[0].Nodes.Add(dt.Rows[i]["CardsName"].ToString());var node = treeView1.Nodes[0].Nodes[treeView1.Nodes[0].Nodes.Count - 1];
node.ImageIndex = 1;
node.SelectedImageIndex = 0;
node.ContextMenuStrip = contextMenuStrip1;
node.Tag = dt.Rows[i]["CardsId"];
}
}private void 添加商品ToolStripMenuItem_Click(object sender, EventArgs e) { int id = DBHelper.cute("INSERT INTO Cards VALUES ('新商品')SELECT @@IDENTITY AS 'Identity'"); if(id <= 0) { MessageBox.Show("添加失败。"); return; } //添加商品 var node = treeView1.Nodes[0].Nodes.Add("新品牌"); node.ImageIndex = 1; node.SelectedImageIndex = 0; //绑定菜单 node.ContextMenuStrip = contextMenuStrip1; //保存节点 node.Tag = id; //找到选择项 treeView1.SelectedNode = node; //开始编辑 node.BeginEdit(); } private void 删除商品ToolStripMenuItem_Click(object sender, EventArgs e) { string id = treeView1.SelectedNode.Tag.ToString(); int num = DBHelper.execute(string.Format("DELETE FROM Cards WHERE CardsId = ") + id); if (num > 0) { treeView1.Nodes[0].Nodes.Remove(treeView1.SelectedNode); } else { MessageBox.Show("删除失败"); } } private void 修改ToolStripMenuItem_Click(object sender, EventArgs e) { treeView1.SelectedNode.BeginEdit(); } private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { if(e.Label == null) { e.CancelEdit = true; return; } DialogResult dr = MessageBox.Show("是否修改商品信息", "修改", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (DialogResult.No == dr) { e.CancelEdit = true; return; } string id = treeView1.SelectedNode.Tag.ToString(); string sql = string.Format("update Cards set CardsName = '{0} ' where CardsId = {1}", e.Label, id); int num = DBHelper.execute(sql); if (num <= 0) { e.CancelEdit = true; MessageBox.Show("保存失败"); } else { } }
解决方案
你的DBHelper.execute返回的是影响的行数,不是select的结果吧
解决方案二:
我做了个 返回的方法。
public static int cute(string sql)
{
//表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程
SqlCommand com = new SqlCommand(sql, con);
con.Open();
//发送sql语句
int num = (int)com.ExecuteNonQuery();
con.Close();
return num;
}
时间: 2024-12-30 12:21:50