无法将DateTime格式插入数据库

时间:2012-07-05 09:09:58

标签: c# asp.net date insert sqlanywhere

我无法将DateTime插入我的数据库。我是否错误地写了这个陈述?

显然没有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的值。如何将其插入数据库??

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

首先,永远不要对SQL查询或命令使用字符串连接。使用参数。 如果您将使用参数:

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

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

答案 2 :(得分:0)

请勿使用日期的引号,删除使用日期的所有引号

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

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