2

一个 SQL 聚合函数,用于计算 DB 中名称输入的数量。

string cnnStr = ConfigurationManager.ConnectionStrings["LGFConnectionString"].ConnectionString;
string mySQL = "SELECT COUNT(*) FROM  " + which.table + " WHERE " + which.column + " = ?pram;";
string value = null;

using (MySqlConnection cnn = new MySqlConnection(cnnStr))
{
        using (MySqlCommand cmd = new MySqlCommand(mySQL, cnn))
        {
            MySqlParameter param = new MySqlParameter("?pram", MySqlDbType.VarChar, 128);
            param.Value = which.text;
            cmd.Parameters.Add(param);

            cnn.Open();

            value = cmd.ExecuteScalar() as string;
            value = cmd.ExecuteScalar().ToString();

            cnn.Close();
        }
}

请注意,我已经打cmd.ExecuteScalar了两次电话。有趣的部分是查询返回不同的结果。

value = cmd.ExecuteScalar() as string;

不返回正确的值。如果 name 列中存在或缺少 name,则返回 null。

value = cmd.ExecuteScalar().ToString();

正确返回。如果存在则返回“1”,如果缺失则返回“0”。

在网上搜索,我没有找到可以理解的解释。

我已经读过,如果 name 列中缺少 name,那么cmd.ExecuteScalar将返回null.

有什么区别:

value = cmd.ExecuteScalar() as string;
value = cmd.ExecuteScalar().ToString();

谢谢你,德狗

4

3 回答 3

3

as文档中

as 运算符用于执行兼容类型之间的转换。

as 运算符类似于强制转换,只是它在转换失败时产生 null 而不是引发异常

// if cmd.ExecuteScalar() is string then return string
// if not then return null
// this will return null, because cmd.ExecuteScalar() won't return string
// for your code it should return Int32
value = cmd.ExecuteScalar() as string;

ToString()文档中

ToString 是 .NET Framework 中的主要格式化方法。它将对象转换为其字符串表示形式,以便它适合显示。(有关 .NET Framework 中的格式化支持的信息,请参阅格式化类型。)

// return a string that represents the current object
// will return correct value because it casts Int32 value to string value
value = cmd.ExecuteScalar().ToString();
于 2012-06-23T14:34:45.537 回答
0

你在上面做两件不同的事情。让我们将您的代码更改为以下内容:

decimal value = cmd.ExecuteScalar();
string str1 = value as string;
string str2 = value.ToString();

str1 将为空,因为十进制不能转换为字符串。str2 将是值,因为您可以在小数点上调用 ToString()。

于 2012-06-23T14:34:13.560 回答
0

如果对象类型与您尝试将其转换为的类型不匹配,则“as”关键字将返回 null。

在您的情况下发生的事情是返回的对象是一个 int 并且当您对此调用 toString 时,它将为您提供整数的字符串表示形式。当你使用它时,它会给你一个空值。

于 2012-06-23T14:40:03.570 回答