gpt4 book ai didi

c# - 对象引用未设置为对象的实例抛出错误?

转载 作者:行者123 更新时间:2023-12-02 05:01:50 26 4
gpt4 key购买 nike

我是 C# 的初学者。我尝试从更新查询中获取最后插入的 ID。但我得到一个错误这是我的代码

String Query1 = "insert into test(userid,score) values ('"+userid+"',0);";
SqlConnection conn1 = new SqlConnection(constring);
SqlCommand cmdDatabase1 = new SqlCommand(Query1, conn1);
SqlDataReader dbreader1;
conn1.Open();
testid = (int)cmdDatabase1.ExecuteScalar();
dbreader1 = cmdDatabase1.ExecuteReader();
while (dbreader1.Read())
{
}

我收到这个错误。

Object reference not set to an instance of an object. on this line testid = (int)cmdDatabase1.ExecuteScalar();

这个我也试过

String Query1 = "insert into test(userid,score) values ('"+userid+"',0);";
SqlConnection conn1 = new SqlConnection(constring);
SqlCommand cmdDatabase1 = new SqlCommand(Query1, conn1);
SqlDataReader dbreader1;
conn1.Open();
object count = cmdDatabase1.ExecuteScalar();
System.Diagnostics.Trace.WriteLine(count.GetType());
int testid = (int)count;
dbreader1 = cmdDatabase1.ExecuteReader();
while (dbreader1.Read())
{
}

同样的错误未将对象引用设置为对象的实例。在这一行 System.Diagnostics.Trace.WriteLine(count.GetType());

最佳答案

要从数据库中获取最后插入的值,您应该编写select 查询。

不是这个问题的一部分,但是在使用 insertselect 时应该使用 parametrized queries 来避免 SQLInjections.

这是了解更多关于 SQLInjections 的链接.

你的代码应该是:

try
{
con.open();
cmd=new SqlCommand("select max(userid) from test",con);
da=new SqlDataAdapter(cmd);
DataSet ds=new DataSet();
da.fill(ds);
int lastInsertedId= int.parse(ds.Tables[0].Rows[0][0].toString());
con.close();
}
catch(exception ex)
{
messagebox.show(ex.Message);
}

您还可以根据所使用的 SqlServer 在 SQL 中使用不同的技术,例如

@@identity,rownumber over。当然,这可以根据您的需要和您使用的 SQLServer 版本。

对于 RowNumber

对于 @@identity

关于c# - 对象引用未设置为对象的实例抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16933772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com