【问题标题】:Inserting datetime type char from form into database将表单中的日期时间类型字符插入数据库
【发布时间】:2013-01-21 07:30:09
【问题描述】:

我正在尝试将日期时间值插入到我的数据库表中,但我遇到了问题。 每次我尝试这样做时,都会弹出此消息:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。 声明已终止。

这是我的代码:

public static void  DoQuery(string fileName, string sql)
{

    SqlConnection conn = ConnectToDb(fileName);
    conn.Open();
    SqlCommand com = new SqlCommand(sql, conn);
    com.ExecuteNonQuery();
    com.Dispose();
    conn.Close();
  
}
    private void button1_Click(object sender, EventArgs e)
    {
        SqlConnection cn = new SqlConnection();
        cn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename='c:\users\***\***\visual studio 2010\Projects\***\***\Database.mdf';Integrated Security=True;User Instance=True";
        cn.Open();
        string[] dateArr = dateBox.Text.Split('/');
        int[] dateInt = new int[3];
        for (int i = 0; i < 3; i++)
        {
            dateInt[i] = Int16.Parse(dateArr[i]);
            MessageBox.Show(dateInt[i]+"");
        }
        DateTime date = new DateTime(dateInt[2],dateInt[1],dateInt[0]);
        
        string sql = "INSERT INTO existProducts(name,date,price,amount) VALUES ('" + nameBox.Text + "','" + date + "','" + priceBox.Text + "','" + amountBox.Text + "')";

        MyAdoHelper.DoQuery("Database.mdf", sql);
        MessageBox.Show("Success!");
       
        cn.Close();
    }

注 1:我有一个例外处理,但我删除了它,因为我一直有 处理这个异常,程序运行不好。

注意 2:我审查了连接字符串,但有一个连接并且工作正常。

【问题讨论】:

  • 抱歉,您对异常有什么看法? “我总是不得不处理这个异常”。是的,所以现在无知好吗?你有一个异常,你删除了处理,你没有告诉我们这个异常?你好?我的房子被烧毁了,我不喜欢叫消防员,你能帮忙吗?
  • 防止这样的问题。很抱歉提到这一点。

标签: c# database string datetime insert


【解决方案1】:

使用Parameters 并且很可能您的问题将得到解决,并且(另一件重要的事情)您将保护自己免受注入攻击 em> 也是。

【讨论】:

  • 什么是SqlParameter?我以前从未听说过这个(我是一个小新手)
  • @user1842086:点击提供的链接并查看示例。这是一种将值注入 SQL 字符串的安全方式。
【解决方案2】:

在插入语句中使用字符串日期值.....

在插入语句中使用 SqlParameters。

INSERT INTO existProducts (name,date,price,amount) VALUES (@name, @date, @price, @amount)


public static void  DoQuery(string fileName, string name, DateTime date, float price, float amount)
{

    SqlConnection conn = ConnectToDb(fileName);
    conn.Open();
    SqlCommand com = new SqlCommand(sql, conn);
    com.Paramaters.AddWithValue("name", name);
    com.Parameters.AddWithValue("date", date);
    ...
    ...
    com.ExecuteNonQuery();
    com.Dispose();
    conn.Close();

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多