Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将null从文本框插入整数字段_C#_Sql_.net_Sql Server_Database - Fatal编程技术网

C# 如何将null从文本框插入整数字段

C# 如何将null从文本框插入整数字段,c#,sql,.net,sql-server,database,C#,Sql,.net,Sql Server,Database,我有一个文本框和日期时间,可以在其中输入整数。我希望将其存储在SQL Server数据库中。如果我不输入任何内容,那么我将存储NULL。 但是,如果文本框留空,则会出现错误,输入字符串的格式不正确 我如何解决这个问题,并将空值输入数据库 代码如下: public void Add_ItemSeasonalPrices(string ItemCode, DateTime FromDate, DateTime ToDate, decimal WholeSaleForFirstUnit, decima

我有一个文本框和日期时间,可以在其中输入整数。我希望将其存储在SQL Server数据库中。如果我不输入任何内容,那么我将存储
NULL
。 但是,如果文本框留空,则会出现错误,输入字符串的格式不正确

我如何解决这个问题,并将空值输入数据库

代码如下:

public void Add_ItemSeasonalPrices(string ItemCode, DateTime FromDate, DateTime ToDate, decimal WholeSaleForFirstUnit, decimal WholeSaleForSecondUnit, decimal WholeSaleForThirdUnit,
        decimal HalfWholeSaleForFirstUnit, decimal HalfWholeSaleForSecondUnit, decimal HalfWholeSaleForThirdUnit,
        decimal DistributorForFirstUnit, decimal DistributorForSecondUnitt)
    {
        DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
        DAL.open();
        SqlParameter[] param = new SqlParameter[22];
        param[0] = new SqlParameter("@ItemCode", SqlDbType.NVarChar, 25);
        param[0].Value = ItemCode;

        param[1] = new SqlParameter("@FromDate", SqlDbType.DateTime);
        param[1].Value = FromDate;


        param[2] = new SqlParameter("@ToDate", SqlDbType.DateTime);
        param[2].Value = ToDate;


        param[3] = new SqlParameter("@WholeSaleForFirstUnit", SqlDbType.Decimal);
        param[3].Value = WholeSaleForFirstUnit;


        param[4] = new SqlParameter("@WholeSaleForSecondUnit", SqlDbType.Decimal);
        param[4].Value = WholeSaleForSecondUnit;


        param[5] = new SqlParameter("@WholeSaleForThirdUnit ", SqlDbType.Decimal);
        param[5].Value = WholeSaleForThirdUnit;

        param[6] = new SqlParameter("@HalfWholeSaleForFirstUnit", SqlDbType.Decimal);
        param[6].Value = HalfWholeSaleForFirstUnit;


        param[7] = new SqlParameter("@HalfWholeSaleForSecondUnit", SqlDbType.Decimal);
        param[7].Value = HalfWholeSaleForSecondUnit;


        param[8] = new SqlParameter("@HalfWholeSaleForThirdUnit", SqlDbType.Decimal);
        param[8].Value = HalfWholeSaleForThirdUnit;


        param[9] = new SqlParameter("@DistributorForFirstUnit", SqlDbType.Decimal);
        param[9].Value = DistributorForFirstUnit;


        param[10] = new SqlParameter("@DistributorForSecondUnit", SqlDbType.Decimal);
        param[10].Value = DistributorForSecondUnit;


        DAL.ExecuteCommand("Add_ItemSeasonalPrices", param);
        DAL.close();
    }
这个代码在btnSave中

Item.Add_ItemSeasonalPrices(txt_ItemCode.Text, Convert.ToDateTime(FromDate.Text), Convert.ToDateTime(ToDate.Text), Convert.ToDecimal(txt_WholeSaleForFirstUnit.Text), Convert.ToDecimal(txt_WholeSaleForSecondUnit.Text),
                                            Convert.ToDecimal(txt_WholeSaleForThirdUnit.Text), Convert.ToDecimal(txt_HalfWholeSaleForFirstUnit.Text),
                                            Convert.ToDecimal(txt_HalfWholeSaleForSecondUnit.Text), Convert.ToDecimal(txt_HalfWholeSaleForThirdUnit.Text),
                                            Convert.ToDecimal(txt_DistributorForFirstUnit.Text), Convert.ToDecimal(txt_DistributorForSecondUnit.Text));
这张桌子呢

CREATE TABLE [dbo].[ItemSeasonalPrices](
[ItemCode] [nvarchar](25) NOT NULL,
[FromDate] [date] NULL,
[ToDate] [date] NULL,
[WholeSaleForFirstUnit] [decimal](18, 3) NULL,
[WholeSaleForSecondUnit] [decimal](18, 3) NULL,
[WholeSaleForThirdUnit] [decimal](18, 3) NULL,
[HalfWholeSaleForFirstUnit] [decimal](18, 3) NULL,
[HalfWholeSaleForSecondUnit] [decimal](18, 3) NULL,
[HalfWholeSaleForThirdUnit] [decimal](18, 3) NULL,
[DistributorForFirstUnit] [decimal](18, 3) NULL,
[DistributorForSecondUnit] [decimal](18, 3) NULL,
[DistributorForThirdUnit] [decimal](18, 3) NULL,
[ExportForFirstUnit] [decimal](18, 3) NULL,
[ExportForSecondUnit] [decimal](18, 3) NULL,
[ExportForThirdUnit] [decimal](18, 3) NULL,
[RetailForFirstUnit] [decimal](18, 3) NULL,
[RetailForSecondUnit] [decimal](18, 3) NULL,
[RetailForThirdUnit] [decimal](18, 3) NULL,
[EndUserForFirstUnit] [decimal](18, 3) NULL,
[EndUserForSecondUnit] [decimal](18, 3) NULL,
[EndUserForThirdUnit] [decimal](18, 3) NULL,
[PriceDefault] [int] NULL
) ON [PRIMARY]

您收到
格式异常
(输入字符串的格式不正确),因为至少有一个文本框不包含有效的小数

您可以对所有变量使用而不是
Convert.ToDecimal

decimal exportForFirstUnit;
decimal.TryParse(textBox1.Text, out exportForFirstUnit);
或者,您可能需要对这些字段进行一些验证,并至少检查文本框是否包含值

另一个问题是你的逻辑有缺陷。考虑代码中的这些行:

param[1] = new SqlParameter("@FromDate", SqlDbType.DateTime);
param[1].Value = FromDate;
param[1].Value = DBNull.Value;

param[2] = new SqlParameter("@ToDate", SqlDbType.DateTime);
param[2].Value = ToDate;
param[2].Value = DBNull.Value;
正确声明
FromDate
ToDate
,然后将SQL参数设置为具有文本框中的值,然后使用
NULL
验证此值,因此,对于执行的每个
INSERT
语句,表中始终不包含任何数据,而不是用户通过表单输入的数据

另外,您的
Add_ItemSeasonalPrices
似乎包含了很多参数,最好在类(SeasonalItems)中包含这些参数,这样会更容易使用

public class SeasonalItems
{
    public decimal WholeSaleForFirstUnit { get; set; }
    public decimal WholeSaleForSecondUnit { get; set; }
}
然后您可以将其用作该方法的参数,如下所示:

public void AddItemSeasonalPrices(SeasonalItems items)
{

}

随着应用程序的增长,您可以进一步扩展该类以容纳更多的单元,但我相信这就足够了

< P>很多地方你应该考虑修改你的代码。

修改
Add_items季节价格
定义以接受
nullable
DateTime

public void Add_ItemSeasonalPrices(string ItemCode, DateTime? FromDate, DateTime? ToDate, decimal WholeSaleForFirstUnit, decimal WholeSaleForSecondUnit, decimal WholeSaleForThirdUnit,
        decimal HalfWholeSaleForFirstUnit, decimal HalfWholeSaleForSecondUnit, decimal HalfWholeSaleForThirdUnit,
        decimal DistributorForFirstUnit, decimal DistributorForSecondUnit,  decimal DistributorForThirdUnit,
        decimal ExportForFirstUnit, decimal ExportForSecondUnit, decimal ExportForThirdUnit,
        decimal RetailForFirstUnit, decimal RetailForSecondUnit, decimal RetailForThirdUnit, 
        decimal EndUserForFirstUnit, decimal EndUserForSecondUnit, decimal EndUserForThirdUnit, int PriceDefault)
    {
       .....
    }
    param[1] = new SqlParameter("@FromDate", SqlDbType.DateTime);
    param[1].Value = FromDate.HasValue? FromDate.Value : DBNull.Value;
    //param[1].Value = DBNull.Value;

    param[2] = new SqlParameter("@ToDate", SqlDbType.DateTime);
    param[2].Value = ToDate.HasValue? ToDate.Value : DBNull.Value;
    //param[2].Value = DBNull.Value;
btn\u save
中,在转换为
DateTime

Item.Add_ItemSeasonalPrices(txt_ItemCode.Text, 

                            string.IsNullOrEmpty(FromDate.Text)? null: Convert.ToDateTime(FromDate.Text), 
                            string.IsNullOrEmpty(ToDate.Text)? null: Convert.ToDateTime(ToDate.Text), Convert.ToDecimal(txt_WholeSaleForFirstUnit.Text), Convert.ToDecimal(txt_WholeSaleForSecondUnit.Text),
                                                Convert.ToDecimal(txt_WholeSaleForThirdUnit.Text), Convert.ToDecimal(txt_HalfWholeSaleForFirstUnit.Text),
                                                Convert.ToDecimal(txt_HalfWholeSaleForSecondUnit.Text), Convert.ToDecimal(txt_HalfWholeSaleForThirdUnit.Text),
                                                Convert.ToDecimal(txt_DistributorForFirstUnit.Text), Convert.ToDecimal(txt_DistributorForSecondUnit.Text), Convert.ToDecimal(txt_DistributorForThirdUnit.Text),
                                                Convert.ToDecimal(txt_ExportForFirstUnit.Text), Convert.ToDecimal(txt_ExportForSecondUnit.Text), Convert.ToDecimal(txt_ExportForThirdUnit.Text),
                                                Convert.ToDecimal(txt_RetailForFirstUnit.Text), Convert.ToDecimal(txt_RetailForSecondUnit.Text), Convert.ToDecimal(txt_RetailForThirdUnit.Text),
                                                Convert.ToDecimal(txt_EndUserForFirstUnit.Text), Convert.ToDecimal(txt_EndUserForSecondUnit.Text), Convert.ToDecimal(txt_EndUserForThirdUnit.Text),
                                                PriceDefault);
最后但并非最不重要的是,代码正在覆盖每个
参数

public void Add_ItemSeasonalPrices(string ItemCode, DateTime? FromDate, DateTime? ToDate, decimal WholeSaleForFirstUnit, decimal WholeSaleForSecondUnit, decimal WholeSaleForThirdUnit,
        decimal HalfWholeSaleForFirstUnit, decimal HalfWholeSaleForSecondUnit, decimal HalfWholeSaleForThirdUnit,
        decimal DistributorForFirstUnit, decimal DistributorForSecondUnit,  decimal DistributorForThirdUnit,
        decimal ExportForFirstUnit, decimal ExportForSecondUnit, decimal ExportForThirdUnit,
        decimal RetailForFirstUnit, decimal RetailForSecondUnit, decimal RetailForThirdUnit, 
        decimal EndUserForFirstUnit, decimal EndUserForSecondUnit, decimal EndUserForThirdUnit, int PriceDefault)
    {
       .....
    }
    param[1] = new SqlParameter("@FromDate", SqlDbType.DateTime);
    param[1].Value = FromDate.HasValue? FromDate.Value : DBNull.Value;
    //param[1].Value = DBNull.Value;

    param[2] = new SqlParameter("@ToDate", SqlDbType.DateTime);
    param[2].Value = ToDate.HasValue? ToDate.Value : DBNull.Value;
    //param[2].Value = DBNull.Value;

您可以使用属性验证。您应该简化代码并切中要害。许多人不会费心去阅读这些代码。