2

我有这个代码:

public int GetUserIdByEmail(string email)
{
  using (SqlConnection conn = new SqlConnection(ZincModelContainer.CONNECTIONSTRING))
  {
    using (SqlCommand cmd = conn.CreateCommand())
    {
      conn.Open();
      cmd.CommandType = System.Data.CommandType.Text;
      cmd.CommandText = String.Concat("SELECT [Zinc].[GetUserIdByEmail] (", email, ")");  //is this correct??? the problem lies here

      return (int)cmd.ExecuteScalar();
     } 
  }
}

我在上面的代码中得到了错误。这仍然不对我现在有我的功能,如下 veljasije 建议的谢谢

4

2 回答 2

2

修改您的程序:

CREATE PROCEDURE [Zinc].[GetUserIdByEmail]
 (
   @Email varchar (100)
 )

 AS
 BEGIN

   SELECT zu.UserId from Zinc.Users zu WHERE Email = @Email

 END

在您的代码中,将参数的类型从更改NVarCharVarChar

功能

CREATE FUNCTION [Zinc].[GetUserIdByEmail]
 (
   @Email varchar(100)
 )
 RETURNS int
 AS
 BEGIN

   DECLARE @UserId int;
   SET @UserId = (SELECT zu.UserId from Zinc.Users zu WHERE Email = @Email)

   RETURN @UserId                
 END
于 2013-02-14T09:56:16.487 回答
1

首先,在 sproc 中指定 @Email 参数的大小 - 如果没有它,它将默认为 1 个字符,因此不会尝试匹配您期望的值。

始终明确指定大小以避免任何问题(例如,根据 Marc_s 的评论,以及我在此处发布的演示,它的行为不同,但在使用 CAST/CONVERT 时默认为 30 个字符)

其次,使用SqlCommand.ExecuteScalar() 例如

userId = (int)cmd.ExecuteScalar();
于 2013-02-14T09:53:18.893 回答