使用C#的SELECT语句

时间:2012-09-05 15:34:26

标签: c# .net sql-server ado.net

我有以下代码:

SqlCommand cmd2 = new SqlCommand(
  "SELECT ClaimId FROM tblPayment WHERE PaymentId = " + PaymentID.ToString(),
  mvarDBConn);
SqlDataReader reader = cmd2.ExecuteReader();
reader.Read();
Int32 ClaimId = reader.GetInt32(0);
reader.Close();

如果我在SQL中运行SELECT语句,它返回的数字很好,但是当我使用ExecuteReader时它返回的全部是0.我尝试了多种方法,包括ExecuteScalar,ExecuteNonQuery,reader.GetString然后将它转换为int,等等

我错过了什么?感谢。

编辑:这是我在SQL Server配置文件中得到的:

以下是我的回复:

 exec sp_executesql N'SELECT ClaimId FROM tblPayment WHERE PaymentId = @paymentID',N'@paymentID nvarchar(5)',@paymentID=N'8392'

当我之前的SqlCommand直接使用SQL时,不知道为什么它将它放入SP_ExecuteSQL中,与'N'相同。

3 个答案:

答案 0 :(得分:9)

最好使用SqlCommand.ExecuteScalar()

int ClaimId = Convert.ToInt32(cmd2.ExecuteScalar());

另外,为避免可能的SQL Injection attack,请使用带参数的ADO命令对象:

// create command
SqlCommand cmd2 = new SqlCommand(
  "SELECT ClaimId FROM tblPayment WHERE PaymentId = @paymentID",
  mvarDBConn);

// add parameter
cmd2.Parameters.AddWithValue("@paymentID", PaymentID);

// execute command and convert the result
int ClaimId = Convert.ToInt32(cmd2.ExecuteScalar());

答案 1 :(得分:3)

您可以尝试使用

 new SqlCommand("SELECT ClaimId FROM tblPayment WHERE PaymentId = @param"); 

 cmd2.Parameters.AddWithValue("@param", PaymentID);

答案 2 :(得分:0)

尝试在读取时运行while循环。

while (reader.Read())
{
    Int32 ClaimId = reader.GetInt32(0);
}

尽管如此,您可能希望在while之外声明ClaimId变量。