簡體   English   中英

如何捕獲空參數並允許在ADO.NET中使用DBNull進行解析

[英]How to capture a null Parameter and allow Parsing with DBNull in ADO.NET

因此,我將這18個參數傳遞給DAL,然后插入或更新Access數據庫。

我有2個字段,分別是DateTime和一個和int DateTime和int參數均為“非必需”,這意味着可以為空字符串。

當我傳遞txtBirthDate.Text, txtHireDate.Text, and txtReportsTo.Text ,我遇到了一個問題txtBirthDate.Text, txtHireDate.Text, and txtReportsTo.Text即如果將它們保留為空,則DAL會以FormatException對我txtBirthDate.Text, txtHireDate.Text, and txtReportsTo.Text因為它無法解析null元素。

所以我現在的問題是,我不確定在哪里解析DateTimeint變量以允許我的Parameters接受它們。 我也不確定如何將這些變量設置為空字符串傳遞到我的DAL的DBNull.Value

這是我的DAL方法調用的示例:

rowsAdded = ((DataAccessLayer)Application["dbAccess"]).insertEmployees(txtLname.Text, txtFname.Text, txtTitle.Text, 
         txtCourt.Text,txtBday.Text,txtHireDate.Text, txtAddress.Text, txtCity.Text,txtRegion.Text,txtPostalCode.Text,
         txtCountry.Text, txtHomePhone.Text, txtExtension.Text, upPhoto.FileName.ToString(),txtNotes.Text,txtReports.Text,txtPassword.Text);

這是我的DAL方法:

 public int insertEmployees(string lname, string fname, string title, string toc, string birth, string hire, string address, string city,
    string region,string postal,string country, string phone, string ext,string photo, string notes, string report, string pass)
{
    string last = lname;
    string first = fname;
    string tlt = title;
    string tOfc = toc;
    string addy = address;
    string town = city;
    string reg = country;
    string phum = phone;
    string exten = ext;
    string rep = report;// THIS IS Int
    string pas = pass;
    string pc = postal;
    string note = notes;
    string regions = region;
    string hD = hire;// THIS IS DATETIME
    string bD = birth;// THIS IS DATETIME
    string pho = photo;
    int rows = 0;
        dbString = "INSERT INTO [Employees] ([LastName],[FirstName],[Title],[TitleOfCourtesy],[BirthDate],[HireDate],[Address],[City],[Region],[PostalCode]," +
        "[Country],[HomePhone],[Extension],[Photo],[Notes],[ReportsTo],[Password]) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        string queryLast = "Select @@Identity";

        conn.Open();
        oleCommand = new OleDbCommand(dbString, conn);

        oleCommand.Parameters.Add(new OleDbParameter("@LastName", OleDbType.VarChar, 20, ParameterDirection.Input, false, 10, 0, "LastName", DataRowVersion.Original, null)).Value = last;
        oleCommand.Parameters.Add(new OleDbParameter("@FirstName", OleDbType.VarChar, 10, ParameterDirection.Input, false, 10, 0, "FirstName", DataRowVersion.Original, null)).Value = first;
        oleCommand.Parameters.Add(new OleDbParameter("@Title", OleDbType.VarChar, 30, ParameterDirection.Input, true, 10, 0, "Title", DataRowVersion.Original, null)).Value = tlt ?? (object)DBNull.Value;
        oleCommand.Parameters.Add(new OleDbParameter("@TitleOfCourtesy", OleDbType.VarChar, 25, ParameterDirection.Input, true, 10, 0, "TitleOfCourtesy", DataRowVersion.Original, null)).Value = tOfc ?? (object)DBNull.Value;
//DATE  oleCommand.Parameters.Add(new OleDbParameter("@BirthDate", OleDbType.DBDate, 20, ParameterDirection.Input, true, 10, 0, "BirthDate", DataRowVersion.Original, null)).Value = (object)bD ?? DBNull.Value;
//DATE  oleCommand.Parameters.Add(new OleDbParameter("@HireDate", OleDbType.DBDate, 20, ParameterDirection.Input, true, 10, 0, "HireDate", DataRowVersion.Original, null)).Value = (object)hD ?? DBNull.Value;
        oleCommand.Parameters.Add(new OleDbParameter("@Address", OleDbType.VarChar, 60, ParameterDirection.Input, true, 10, 0, "Address", DataRowVersion.Original, null)).Value = addy ?? (object)DBNull.Value;
        oleCommand.Parameters.Add(new OleDbParameter("@City", OleDbType.VarChar, 15, ParameterDirection.Input, true, 10, 10, "City", DataRowVersion.Original, null)).Value = phum ?? (object)DBNull.Value;
        oleCommand.Parameters.Add(new OleDbParameter("@Region", OleDbType.VarChar, 15, ParameterDirection.Input, true, 10, 0, "Region", DataRowVersion.Original, null)).Value = regions ?? (object)DBNull.Value;
        oleCommand.Parameters.Add(new OleDbParameter("@PostalCode", OleDbType.VarChar, 10, ParameterDirection.Input, true, 10, 0, "PostalCode", DataRowVersion.Original, null)).Value = pc ?? (object)DBNull.Value;
        oleCommand.Parameters.Add(new OleDbParameter("@Country", OleDbType.VarChar, 15, ParameterDirection.Input, true, 10, 0, "Country", DataRowVersion.Original, null)).Value = reg ?? (object)DBNull.Value;
        oleCommand.Parameters.Add(new OleDbParameter("@HomePhone", OleDbType.VarChar, 24, ParameterDirection.Input, true, 10, 0, "HomePhone", DataRowVersion.Original, null)).Value = phum ?? (object)DBNull.Value;
        oleCommand.Parameters.Add(new OleDbParameter("@Extension", OleDbType.VarChar, 4, ParameterDirection.Input, true, 10, 0, "Extension", DataRowVersion.Original, null)).Value = exten ?? (object)DBNull.Value;
        oleCommand.Parameters.Add(new OleDbParameter("@Photo", OleDbType.VarChar, 255, ParameterDirection.Input, true, 10, 0, "Photo", DataRowVersion.Original, null)).Value = pho ?? (object)DBNull.Value; ;
        oleCommand.Parameters.Add(new OleDbParameter("@Notes", OleDbType.VarWChar, 255, ParameterDirection.Input, true, 10, 0, "Notes", DataRowVersion.Original, null)).Value = note ?? (object)DBNull.Value;
  //INT oleCommand.Parameters.Add(new OleDbParameter("@ReportsTo", OleDbType.Integer, 2, ParameterDirection.Input, true, 10, 0, "ReportsTo", DataRowVersion.Original, null)).Value = (object)rep ?? DBNull.Value;
        oleCommand.Parameters.Add(new OleDbParameter("@Password", OleDbType.VarChar, 255, ParameterDirection.Input, false, 10, 0, "Password", DataRowVersion.Original, null)).Value = pas ?? (object)DBNull.Value;
        rows = (int)oleCommand.ExecuteNonQuery();
        oleCommand.CommandText = queryLast;

對於字符串值,可以使用以下表達式:

oleCommand.Parameters.Add(new OleDbParameter("@LastName", OleDbType.VarChar, 20, 
                                             ParameterDirection.Input, false, 10, 
                                             0, "LastName", 
                                             DataRowVersion.Original, null)
                         ).Value = String.IsNullOrEmpty(last) ? DBNull.Value : last;

對其余的字符串值重復此操作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM