首页 > 解决方案 > SQL 命令返回 null 作为值

问题描述

我以前只熟悉 Linq 之类的数据访问。我现在正在做一些事情,需要我在后端使用实际的 SQL 命令来返回单个值。我的代码编译并运行,但是它返回 null 的值,我知道除了空字符串之外应该返回一些东西......

我的结构在这上面吗?还是缺少其他东西?

下面是我的代码:

  internal string GetSexDescription(string sex, int id_merchant)
    {
        string newSex = "";

        var builder = new ConnectionStringHelper();
        var connString = builder.getCasinoDBString(id_merchant);

        using (SqlConnection conn = new SqlConnection(connString))
        {
            string sql = "SELECT Description FROM person_gender_lookup WHERE ID = @sex";

            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                cmd.Parameters.Add("@Sex", SqlDbType.VarChar).Value = sex;

                newSex = cmd.ExecuteScalar().ToString();
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            return newSex;
        }
    }

这是表的结果集的图片:

在此处输入图像描述

标签: c#sqlasp.net

解决方案


打开连接。

internal string GetSexDescription(string sex, int id_merchant)
{
   string newSex = "";

   var builder = new ConnectionStringHelper();
   var connString = builder.getCasinoDBString(id_merchant);

   using (SqlConnection conn = new SqlConnection(connString))
   {
      conn.Open(); //<- This line here.
      string sql = "SELECT Description FROM person_gender_lookup WHERE ID = @sex";

      SqlCommand cmd = new SqlCommand(sql, conn);
      try
      {
         cmd.Parameters.Add("@Sex", SqlDbType.VarChar).Value = sex;

         newSex = cmd.ExecuteScalar().ToString();
      }
      catch(Exception ex)
      {
         Console.WriteLine(ex.Message);
      }

      return newSex;
   }
}

cmd.ExecuteScalar()可能是InvalidOperationException因为您尚未打开连接而引发的。异常被捕获,输出到控制台,然后newSex从调用 throw 开始返回初始值ExecuteScalar


推荐阅读