C# 将十进制从文本框插入sql

C# 将十进制从文本框插入sql,c#,asp.net,sql-server,decimal,parameter-passing,C#,Asp.net,Sql Server,Decimal,Parameter Passing,我有一个sql列,它保存一个十进制值。比如说,纬度是从一个文本框来的 Latitude decimal(20,16), 现在我想检查textbox是否为空或包含非十进制字符,如果是..它应该插入一个像“0”这样的默认值,或者如果所有内容都已就绪..只需插入十进制 我尝试了以下方法: int latoutput; string latinput = txtLatitude.Text; bool latresult = int.TryParse(latinput, out latoutput);

我有一个sql列,它保存一个十进制值。比如说,纬度是从一个文本框来的

Latitude decimal(20,16),
现在我想检查textbox是否为空或包含非十进制字符,如果是..它应该插入一个像“0”这样的默认值,或者如果所有内容都已就绪..只需插入十进制

我尝试了以下方法:

int latoutput;
string latinput = txtLatitude.Text;
bool latresult = int.TryParse(latinput, out latoutput);
if(latresult)
{
    cmd.Parameters.AddWithValue("@Latitude", Convert.ToDecimal(latinput));
}
else
{
    cmd.Parameters.AddWithValue("@Latitude", null);
}
当执行时,即使文本框包含有效的十进制数,它也会转到ELSE块,并抛出一个未提供@Latitude的异常

这里有两个问题:

  • 为什么它不将有效的十进制数作为输入并进入ELSE块
  • 我不确定十进制列是否可以为空,如果不可以,我的默认值的替代值是什么

  • 提前感谢。

    您使用的是
    int.TryParse
    而不是
    decimal.TryParse
    。如果输入任何带有小数点的内容,即
    123.45
    ,则
    int.TryParse
    将失败。更新您的代码以使用十进制。TryParse:

    bool latresult = decimal.TryParse(latinput, out latoutput);
    

    要回答第二个问题,如果十进制列定义为可空,则它们在数据库中可以为空。如果不知道模式和过程的外观,我无法确定应该传递到过程中的内容。

    您使用的是
    int.TryParse
    而不是
    decimal.TryParse
    。如果输入任何带有小数点的内容,即
    123.45
    ,则
    int.TryParse
    将失败。更新您的代码以使用十进制。TryParse:

    bool latresult = decimal.TryParse(latinput, out latoutput);
    

    要回答第二个问题,如果十进制列定义为可空,则它们在数据库中可以为空。在不知道模式和过程的情况下,我无法确定应该将什么传递到过程中。

    您也可以看看这篇文章。请注意,您得到的是
    @Latitude未提供
    错误,因为您应该传递
    DBNull.Value
    而不是
    null
    ,您也可以看看这篇文章。请注意,您得到的是
    @纬度未提供
    错误,因为您应该传递
    DBNull.Value
    而不是
    null
    回答了我的所有问题。谢谢您回答了我的所有问题。非常感谢