簡體   English   中英

如何在 C# 中使用 datetimepicker 將日期(長格式)插入到訪問數據庫中? (錯誤僅在日期部分)

[英]how to insert date(long format) into access database using datetimepicker in c# ? (error is in date part only)

錯誤圖片在這里
錯誤在查詢行中,顯示語法錯誤

試試{

    string zero = "0";
    DateTime dat = this.dateTimePicker1.Value.Date;
    connection1.Open();
    OleDbCommand command = new OleDbCommand();
    command.Connection = connection1;
    command.CommandText = "insert into client_table(CLIENT, DATE,BILL_AMOUNT, PAID_AMOUNT, BALANCE, CONTACT, ADDRESS )VALUES ('" + txt_client.Text + "', #" + dat.ToLongDateString() + "# ,'" + zero + "','" + zero + "','" + zero + "','" + txt_contact.Text + "','" + txt_address.Text + "')";

    command.ExecuteNonQuery();
    connection1.Close();
    MessageBox.Show("New Client Registration done Successfully.");
    connection1.Dispose();
    this.Hide();
    employee_form f1 = new employee_form("");
    f1.ShowDialog();
}

提前謝謝你

在 Access 中,日期由#分隔,而不是' 此外,Access 無法識別長日期格式。 但是日期不會以任何格式存儲所以不用擔心,將其更改為:

... + "', #" + dat.ToString() + "# ...etc.

盡管如果您不參數化您的查詢,則可以通過 SQL 注入造成嚴重損壞或數據泄露,因為有人可能會在您隱式信任的那些文本框中鍵入 SQL 語句。

工作示例:

class Program
{
    static void Main(string[] args)
    {
        System.Data.OleDb.OleDbConnectionStringBuilder bldr = new System.Data.OleDb.OleDbConnectionStringBuilder();
        bldr.DataSource = @"C:\Users\tekhe\Documents\Database2.mdb";
        bldr.Provider = "Microsoft.Jet.OLEDB.4.0";

        using (System.Data.OleDb.OleDbConnection cnxn = new System.Data.OleDb.OleDbConnection(bldr.ConnectionString))
        {
            cnxn.Open();
            Console.WriteLine("open");

            using (System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand())
            {
                cmd.Connection = cnxn;
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = "INSERT INTO [Table1] ([Dob]) VALUES(#" + DateTime.Now.ToString() + "#)";
                cmd.ExecuteNonQuery();
            }
        }
        Console.ReadKey();
    }
}

在此處輸入圖片說明

更新

但是,您想要做更多這樣的事情,它使用參數來防止 SQL 注入,這是非常容易被利用的,所以不要認為您真的不需要擔心它:

static void Main(string[] args)
{
    OleDbConnectionStringBuilder bldr = new OleDbConnectionStringBuilder();
    bldr.DataSource = @"C:\Users\tekhe\Documents\Database2.mdb";
    bldr.Provider = "Microsoft.Jet.OLEDB.4.0";

    using (System.Data.OleDb.OleDbConnection cnxn = new OleDbConnection(bldr.ConnectionString))
    {
        cnxn.Open();
        Console.WriteLine("open");

        using (System.Data.OleDb.OleDbCommand cmd = new OleDbCommand())
        {
            cmd.Connection = cnxn;
            cmd.CommandType = System.Data.CommandType.Text;
            OleDbParameter dobParam = new OleDbParameter("@dob", OleDbType.Date);
            dobParam.Value = DateTime.Now;
            cmd.Parameters.Add(dobParam);
            cmd.CommandText = "INSERT INTO [Table1] ([Dob]) VALUES(@dob)";
            cmd.ExecuteNonQuery();
        }
    }
    Console.ReadKey();
}

//在訪問表中寫入日期的代碼。

string zero = "0";
DateTime dat = this.dateTimePicker1.Value.Date;
//MessageBox.Show(dat.ToShortDateString());
connection1.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection1;
//command.CommandText = "insert into client_table(DATEE) values( '"dat.ToShortDateString()+"')";
command.CommandText = "insert into client_table (CLIENT, DATEE, BILL_AMOUNT, PAID_AMOUNT, BALANCE, CONTACT, ADDRESS )VALUES ('" + txt_client.Text + "', #"+dat.ToShortDateString()+"# ,'" + zero + "','" + zero + "','" + zero + "','" + txt_contact.Text + "','" + txt_address.Text + "')";
command.ExecuteNonQuery();
connection1.Close();
MessageBox.Show("New Client Registration done Successfully.");
connection1.Dispose();

//用於接收兩個日期范圍之間的日期的新代碼

try
  {
   DateTime dat = this.dateTimePicker1.Value.Date;
   DateTime dat2 = this.dateTimePicker2.Value.Date;
   // MessageBox.Show(dat.ToShortDateString() + "  " + dat2.ToShortDateString());
   connection1.Open();
   OleDbCommand command = new OleDbCommand();
   command.Connection = connection1;
   string query;
   query = "select * from client_table Where DATEE Between #" + dat.ToLongDateString() +"# and #" + dat2.ToLongDateString() + "# ";
   command.CommandText = query;
   OleDbDataAdapter da = new OleDbDataAdapter(command);
   DataTable dt = new DataTable();
   da.Fill(dt);
   dataGridView1.DataSource = dt;
   connection1.Close();
   }
 catch (Exception ex)
   {
     MessageBox.Show("Error" + ex);
   }

謝謝大家的支持。

暫無
暫無

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

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