我在使用c#在ms访问中插入日期时遇到问题

时间:2014-03-08 09:45:49

标签: c# datetimepicker

对不起,如果这个问题之前问过,我是c#的新手我正在使用ms访问数据库我将日期存储到ms访问日期字段...

请检查错误是什么 我的错误字符串如下:

无法将参数值从字符串转换为时间跨度

代码是:

private void button1_Click(object sender, EventArgs e)
    {
        //create connection 
        OleDbConnection conn = new OleDbConnection();
        conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=posv.accdb";
        conn.Open();
        string Expanse_Name = expanse_name.Text;
        string Expanse_Cost = expanse_cost.Text;
        string Expanse_Date = expanse_date.Value.ToString("m/d/Y");
        OleDbCommand cmd = new OleDbCommand("INSERT INTO expanses (Expanse_Name, Expanse_Cost,Expanse_Date) VALUES (@Expanse_Name, @Expanse_Cost,@Expanse_Date)", conn);

        if(conn.State == ConnectionState.Open){

            cmd.Parameters.Add("@Expanse_Name", OleDbType.VarChar, 20).Value = Expanse_Name;
            cmd.Parameters.Add("@Expanse_Cost", OleDbType.UnsignedInt, 20).Value = Expanse_Cost;
            cmd.Parameters.Add("@Expanse_Date", OleDbType.VarChar, 20).Value = Expanse_Date.;

            try {

                cmd.ExecuteNonQuery();
                MessageBox.Show("Expanse Added Success fully!");

            }catch(OleDbException exps){

                MessageBox.Show(exps.Message);
                conn.Close();

            } // end try


        } //end conn state

    } // end save function

3 个答案:

答案 0 :(得分:0)

您需要为db变量指定正确的数据类型。它取决于您在db中选择的数据类型。因此,最好的方法是查看数据库中的相应数据类型并相应地进行更改。

试试这个:

OleDbConnection conn = new OleDbConnection();
    conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=posv.accdb";
    conn.Open();
    string Expanse_Name = expanse_name.Text;
    string Expanse_Cost = expanse_cost.Text;
    string Expanse_Date = expanse_date.Value.ToString("m/d/Y");
    OleDbCommand cmd = new OleDbCommand("INSERT INTO expanses (Expanse_Name, Expanse_Cost,Expanse_Date) VALUES (@Expanse_Name, @Expanse_Cost,@Expanse_Date)", conn);

    if(conn.State == ConnectionState.Open){

        cmd.Parameters.Add("@Expanse_Name", OleDbType.VarChar, 20).Value = Expanse_Name;
        cmd.Parameters.Add("@Expanse_Cost", OleDbType.UnsignedInt, 20).Value = Expanse_Cost;
        cmd.Parameters.Add("@Expanse_Date", OleDbType.DBTimeStamp, 20).Value = Expanse_Date.;

        try {

            cmd.ExecuteNonQuery();
            MessageBox.Show("Expanse Added Success fully!");

        }catch(OleDbException exps){

            MessageBox.Show(exps.Message);
            conn.Close();

        } // end try


    } //end conn state

} 

答案 1 :(得分:0)

更改第line行上的ToString格式:

string Expanse_Date = expanse_date.Value.ToString("HH:mm:ss.fff");

答案 2 :(得分:0)

我认为Expanse_Date应该保留在DateTime中,并且它的参数类型应该是OleDbType.DBTimeStamp。 (请使用块。)

    private void button1_Click(object sender, EventArgs e)
    {
        using (var conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=posv.accdb"))
        {
            conn.Open();

            var Expanse_Name = expanse_name.Text;
            var Expanse_Cost = expanse_cost.Text;
            var Expanse_Date = expanse_date.Value;
            using (var cmd = new OleDbCommand("INSERT INTO expanses (Expanse_Name, Expanse_Cost,Expanse_Date) VALUES (@Expanse_Name, @Expanse_Cost,@Expanse_Date)", conn))
            {
                cmd.Parameters.Add("@Expanse_Name", OleDbType.VarChar, 20).Value = Expanse_Name;
                cmd.Parameters.Add("@Expanse_Cost", OleDbType.UnsignedInt, 20).Value = Expanse_Cost;
                cmd.Parameters.Add("@Expanse_Date", OleDbType.DBTimeStamp, 20).Value = Expanse_Date;

                try
                {
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Expanse Added Success fully!");
                }
                catch (OleDbException exps)
                {
                    MessageBox.Show(exps.Message);
                    conn.Close();
                }
            }
        }
    }