我有以下代码从数据库返回一个id号。它在我本地运行时工作正常,但是当我将文件放到服务器上时,它会将数据记录到数据库中,但它只返回0而不是ID号。
HHID
是一个ID,当我将信息记录到数据库时会自动增加。
SqlConnection conn = new SqlConnection("DB connection stuff");
SqlCommand cmd = conn.CreateCommand();
SqlDataReader reader;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "insert_workshop_requests";
cmd.Parameters.AddWithValue("@HHID", 1);
cmd.Parameters.AddWithValue("@username", usernameData.Text);
cmd.Parameters.AddWithValue("@name", nameData.Text);
cmd.Parameters.AddWithValue("@email", emailData.Text);
cmd.Parameters["@HHID"].Direction = System.Data.ParameterDirection.Output;
try
{
conn.Open();
reader = cmd.ExecuteReader();
HHID = System.Convert.ToInt32(cmd.Parameters["@HHID"].Value);
}
catch (Exception exc)
{
}
finally
{
if (conn.State != ConnectionState.Closed)
conn.Close();
}
这让我抓狂!希望有人可以提供帮助,因为虽然我发现大量关于SP的有用文章存储0而不是ID,但问题始终是在本地运行时。我在本地工作使得调试非常困难!
谢谢!
答案 0 :(得分:1)
您正在将ExecuteReader用于非SELECT的内容。这对返回参数有一个有趣的副作用。在关闭阅读器之前, Direction = Output 参数内的值不可用。
SQL OUTPUT Stored Procedures not working with ExecuteReader
所以你可以关闭阅读器,但实际上你应该使用ExecuteNonQuery进行INSERT / UPDATE / DELETE查询
conn.Open();
reader = cmd.ExecuteReader();
reader.Close();
HHID = System.Convert.ToInt32(cmd.Parameters["@HHID"].Value);
或更好
conn.Open();
int records = cmd.ExecuteNonQuery();
HHID = System.Convert.ToInt32(cmd.Parameters["@HHID"].Value);
答案 1 :(得分:0)
据我所知,你试图返回最后一个条目的id, 为此你可以使用它并将结果绑定到一个变量并返回它
SELECT SCOPE_IDENTITY()
我希望这会成功