存储过程仅在服务器上返回0,而不是在本地运行时返回0

时间:2017-05-10 09:36:15

标签: c# sql-server stored-procedures webforms

我有以下代码从数据库返回一个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,但问题始终是在本地运行时。我在本地工作使得调试非常困难!

谢谢!

2 个答案:

答案 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()

我希望这会成功