C# 需要处理空异常
我得到的C# 需要处理空异常,c#,asp.net,null,C#,Asp.net,Null,我得到的对象无法从DBNull转换为其他类型。 如何使用try和catch 请帮助我了解语法。我猜错误在这里: private int MyTimeValue() { int Value = 0; string connectionString = GetConfigurationSettingValue("ConnectionString"); int Days = 120; using (SqlConnection connection = new SqlC
对象无法从DBNull转换为其他类型。
如何使用try
和catch
请帮助我了解语法。我猜错误在这里:
private int MyTimeValue()
{
int Value = 0;
string connectionString = GetConfigurationSettingValue("ConnectionString");
int Days = 120;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand cmd = new SqlCommand("select [dbo].[My_function] (@Span)", connection))
{
cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.Add(new SqlParameter("@Span", Days));
Value = Convert.ToInt32(cmd.ExecuteScalar());
}
}
return (Value);
}
试试这个:
Value = Convert.ToInt32(cmd.ExecuteScalar());
注意:在我看来,您的命令字符串也是错误的。这可以通过两种方式完成 案例1:处理特定异常
var result = cmd.ExecuteScalar();
Value = result == DBNull.Value ? 0 : Convert.ToInt32(result);
案例2:检查变量是否为Null,并捕获其他意外异常的常规异常
private int MyTimeValue()
{
int Value = 0;
try
{
string connectionString = GetConfigurationSettingValue("ConnectionString");
int Days = 120;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand cmd = new SqlCommand("select [dbo].[My_function] (@Span)", connection))
{
cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.Add(new SqlParameter("@Span", Days));
Value = Convert.ToInt32(cmd.ExecuteScalar());
}
}
catch(NullReferenceException ex)
{
\\Handle Exception
}
return (Value);
}
您可以在转换之前进行验证
private int MyTimeValue()
{
int Value = 0;
try
{
string connectionString = GetConfigurationSettingValue("ConnectionString");
int Days = 120;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand cmd = new SqlCommand("select [dbo].[My_function] (@Span)", connection))
{
cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.Add(new SqlParameter("@Span", Days));
var result = cmd.ExecuteScalar();
if(result !=null)
Value = Convert.ToInt32(result );
}
}
catch(Exception ex)
{
\\For handling unexpected exceptions
}
return (Value);
}
并添加如下参数
object result = cmd.ExecuteScalar();
if(result != null)
Value = Convert.ToInt32(result);
作为旁注,行cmd.CommandType=System.Data.CommandType.Text代码>是没有必要的。默认命令类型为Text请尝试以下操作
cmd.Parameters.AddWithValue("@Span", Days);
首先需要检查ExecuteScalar返回的值是否为null,以便在尝试将对象强制转换为Int32时不会发生异常
Value = cmd.ExecuteScalar();
if (((Value != null) || (Value != DBNull.Value)))
{
Value =(int)Value ;
}
此调用可能重复两次ExecuteScalar()。@Selman22是否编辑了ans?哪一个是最好的方法?这是最好的方法吗?如果NULL
将返回一个0
@ashuthinks否,这不是最好的方法,因为这不是异常情况(即,您期望有时值将为NULL),处理所有异常类型并创建大型try
块也是一个坏主意。您不应该依赖于常规异常。相反,您应该处理特定的异常。如果在使用变量之前验证变量会更好,尤其是当变量来自函数外部时。是的。我刚刚更新了问题。你可以选择上述任何一种情况。如果这是你的问题的答案,你可以接受这个答案。:)<代码>如果(DBNull.Value!=null)
什么?:P
private int MyTimeValue()
{
int Value = 0;
string connectionString = GetConfigurationSettingValue("ConnectionString");
int Days = 120;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand cmd = new SqlCommand("select [dbo].[My_function] (@Span)", connection))
{
cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.Add(new SqlParameter("@Span", Days));
object o=cmd.ExecuteScalar();
if(o!=null)
Value = Convert.ToInt32(o);
}
}
return (Value);
}