ExecuteScalar() 总是 return NULL
ExecuteScalar() always return NULL
我正在尝试 return 使用 ExecuteScalar() 从数据库中获取一个整数。但是,当我 运行 查询数据库本身时,我得到了正确的答案,并且 c# 一直给我一个 0(Null)。我知道它 return 是一个空值,因为在我添加 id = Convert.ToInt32(command.ExecuteScalar());
之前它会给我一个错误,告诉我确保处理 NULL。我期待它 return 顺便说一句 3。
private int getFamilyId()
{
int id = 0;
using (SqlConnection connection = new SqlConnection(Globaldata.ConnectionString))
{
using (SqlCommand command = new SqlCommand())
{
string sqlString = @"SELECT [Id] FROM [dbo].[FamilyDetails];";
command.Connection = connection;
command.CommandText = sqlString;
try
{
connection.Open();
id = Convert.ToInt32(command.ExecuteScalar());
}
catch (Exception e)
{
MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK);
}
finally
{
connection.Close();
}
return id;
}
}
}
--更新--
现在可以用了,我的连接字符串少了一个字符。我认为它是在我取出连接字符串的连接超时部分时发生的。
感谢您的建议!!!
当你这样做时:
string sqlString = @"SELECT [Id] FROM [dbo].[FamilyDetails];";
您不想这样做:
id = Convert.ToInt32(command.ExecuteScalar());
这里可能会出现三处错误。
问题#1:
如果 table 中没有行,command.ExecuteScalar() 将 return Null.
问题 #2:
如果 table 中有任何行,command.ExecuteScalar() 将 return 它碰巧遇到的第一行的值,因为 SELECT 语句不限于 1 个值.
问题 #3:
如果 Id 列未声明为 NOT NULL command.ExecuteScalar() 可以 return a DbNull,这使得没有转换为整数时有意义。
尝试看看当 table 中有 0 或 1 或 2 条记录时会发生什么。
我正在尝试 return 使用 ExecuteScalar() 从数据库中获取一个整数。但是,当我 运行 查询数据库本身时,我得到了正确的答案,并且 c# 一直给我一个 0(Null)。我知道它 return 是一个空值,因为在我添加 id = Convert.ToInt32(command.ExecuteScalar());
之前它会给我一个错误,告诉我确保处理 NULL。我期待它 return 顺便说一句 3。
private int getFamilyId()
{
int id = 0;
using (SqlConnection connection = new SqlConnection(Globaldata.ConnectionString))
{
using (SqlCommand command = new SqlCommand())
{
string sqlString = @"SELECT [Id] FROM [dbo].[FamilyDetails];";
command.Connection = connection;
command.CommandText = sqlString;
try
{
connection.Open();
id = Convert.ToInt32(command.ExecuteScalar());
}
catch (Exception e)
{
MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK);
}
finally
{
connection.Close();
}
return id;
}
}
}
--更新--
现在可以用了,我的连接字符串少了一个字符。我认为它是在我取出连接字符串的连接超时部分时发生的。
感谢您的建议!!!
当你这样做时:
string sqlString = @"SELECT [Id] FROM [dbo].[FamilyDetails];";
您不想这样做:
id = Convert.ToInt32(command.ExecuteScalar());
这里可能会出现三处错误。
问题#1: 如果 table 中没有行,command.ExecuteScalar() 将 return Null.
问题 #2: 如果 table 中有任何行,command.ExecuteScalar() 将 return 它碰巧遇到的第一行的值,因为 SELECT 语句不限于 1 个值.
问题 #3: 如果 Id 列未声明为 NOT NULL command.ExecuteScalar() 可以 return a DbNull,这使得没有转换为整数时有意义。
尝试看看当 table 中有 0 或 1 或 2 条记录时会发生什么。