0

我无法将 DateTime 插入我的数据库。我写错了声明吗?

显然没有日期时间,我可以插入数据库

    string dateAndTime = date + " " + time;

    CultureInfo provider = CultureInfo.InvariantCulture;        
    DateTime theDateTime = DateTime.ParseExact(dateAndTime, "d MMMM yyyy hh:mm tt", provider);

//Create a connection, replace the data source name with the name of the SQL Anywhere Demo Database that you installed
            SAConnection myConnection = new SAConnection("UserID=dba;Password=sql;DatabaseName=emaDB;ServerName=emaDB");
            //open the connection 
            ; myConnection.Open();
            //Create a command object. 
            SACommand insertAccount = myConnection.CreateCommand();
            //Specify a query. 
            insertAccount.CommandText = ("INSERT INTO [meetingMinutes] (title,location,perioddate,periodtime,attenders,agenda,accountID,facilitator,datetime) VALUES ('"+title+"','" + location + "', '" + date + "','" + time + "', '" + attender + "','" + agenda + "', '" + accountID + "','" + facilitator + "','" +theDateTime+ "')");
try
    {
        insertAccount.ExecuteNonQuery();

        if (title == "" || agenda == "")
        {
            btnSubmit.Attributes.Add("onclick", "displayIfSuccessfulInsert();");
            //ScriptManager.RegisterStartupScript(this, GetType(), "error", "alert('Please ensure to have a title or agenda!');", true);
        }
        else
        {

            btnSubmit.Attributes.Add("onclick", "displayIfSuccessfulInsert();");
            Response.Redirect("HomePage.aspx");
            //ScriptManager.RegisterStartupScript(this, this.GetType(), "Redit", "alert('Minutes Created!'); window.location='" + Request.ApplicationPath + "/HomePage.aspx';", true);
        }
    }
    catch (Exception exception)
    {
        Console.WriteLine(exception);
    }

    finally 
    {            
        myConnection.Close();          
    }

它不会将 SQL 插入我的数据库。

PS:例如,theDateTime 的值可能是 7/14/2012 1:35:00 AM。如何将其插入数据库?

4

3 回答 3

2

是的,您应该使用参数 {0}、{1} 等编写查询,然后使用Parameters.Add

insertAccount.CommandText = ("INSERT INTO [meetingMinutes]  
   (title,location,perioddate,periodtime, ...) 
   VALUES (?,?,?,?,  ... )");
insertAccount.Parameters.Add( ... );

这将确保 SQL 以正确的语法形成;并且还可以防止 SQL 注入攻击。

于 2012-07-05T09:13:51.057 回答
1

首先,切勿对 SQL 查询或命令使用字符串连接。使用参数。如果您将使用参数,那么:

  • 无法进行 sql 注入
  • 查询文本和计划被缓存,从而提高了性能
  • 以及在您的情况下重要的是 - 您不必考虑值的格式,只需将 DateTime 变量作为参数传递

还要交叉检查您的数据库列是否具有 datetime2 类型,否则很可能您将无法存储小于 1758 年 1 月 1 日的值(例如 DateTime.MinValue)。

于 2012-07-05T09:33:39.257 回答
0

不要在您的日期使用引号,删除您使用日期的所有引号

change ,'" +theDateTime+ "') to ," +theDateTime+ ") 

并且还保护 yr sql 导致它无法保存 SQL 注入

于 2012-07-05T09:17:10.153 回答