想插入记录返回自动生成的编号,语句无效
目的:新建一个试卷,插入试卷名称,试卷ID为自动生成,返回试卷ID,代码如下,问题是没有插入记录,也没有报错,请大家看看:
string SavePaper()
{
string sQUES_ID = "";
connection.Open();
sSql = "insert into t_Paper where values('" + txtPaperName.Text.Trim() + "');"
+ "select @@identity as paper_id";
SqlCommand cmd = new SqlCommand(sSql, connection);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
sQUES_ID = dr["paper_id"].ToString();
connection.Close();
return sQUES_ID;
}
[解决办法]
string SavePaper()
{
string sQUES_ID = "";
connection.Open();
sSql = "insert into t_Paper where values('" + txtPaperName.Text.Trim() + "');"
+ "select @@identity as paper_id";
SqlCommand cmd = new SqlCommand(sSql, connection);
object obj = cmd.ExecuteScalar();
sQUES_ID = obj.ToString();
connection.Close();
return sQUES_ID;
}
[解决办法]
@@identity 默认是ID 列 你插String 肯定没有INSERT
执行是可以的
[解决办法]
上面的where去掉 我是用你之前写的语句的
[解决办法]
@@identity 默认是ID 列 你插String 肯定没有INSERT
执行是可以的
sSql = "insert into t_Paper values('" + txtPaperName.Text.Trim() + "');"
+ "select @@identity as paper_id";try
[解决办法]
不需要列名为id
@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 是相似的函数,因为他们都返回插入到表的 IDENTITY 列的最后一个值。即自增长列的最后的值.
[解决办法]
@@identity 默认是ID 列 你插String 肯定没有INSERT
执行是可以的sSql = "insert into t_Paper values('" + txtPaperName.Text.Trim() + "');"
+ "select @@identity as paper_id";
try
这个,和我原先的代码是一样的呀,,,感觉没执行insert语句,是不是insert不能用ExecuteReader()?
我上面不是给你一个方法了么 你试了么?
[解决办法]
@@identity 默认是ID 列 你插String 肯定没有INSERT
执行是可以的sSql = "insert into t_Paper values('" + txtPaperName.Text.Trim() + "');"
+ "select @@identity as paper_id";
try
这个,和我原先的代码是一样的呀,,,感觉没执行insert语句,是不是insert不能用ExecuteReader()?
我上面不是给你一个方法了么 你试了么?
试了,没有插进去
这个表就两个字段了
[解决办法]
用ExecuteScalar()返回的值就是该记录的id了
[解决办法]
你把语句提取出来放到 SQL里执行一次就知道问题在哪了。
[解决办法]
好怪的写法, int id = DBHelper.GetScalar(sql).ToString(); 这样不就返回了。
public static int GetScalar(string safeSql)
{
SqlCommand cmd = new SqlCommand(safeSql, Connection);
int result = Convert.ToInt32(cmd.ExecuteScalar());
connection.Close();
return result;
}