ExcuteNonQuery returns 向数据库插入数据时为空

ExcuteNonQuery returns null when inserting data to DB

我有一个显示用户 post 并允许用户添加新 post 的网页。我使用 SqlDataSource 从数据库中获取数据,并且绑定了一个中继器以显示检索到的 post。我的问题是当用户想要插入一个新的 post 时。这是我遵循的逻辑:

1- 获取用户在post区域输入的数据,如文字和图片(用户可以在post上传图片)。

2- 使用从新 post 区域获得的值构建插入查询。

3- 执行查询。

4- 使用 DataBind() 更新 SqlDataSource

5- 使用 DataBind() 更新与数据源关联的转发器。

由于某些原因,插入命令插入不起作用。我已经尝试使用典型的 SqlConnection 方法插入,带有参数查询的 SqlConnection 方法(我使用参数而不是直接使用插入的 post 信息,例如@text),我什至尝试使用数据源本身执行插入,没有任何效果。这是我的代码:

protected void submitPost(object sender, EventArgs e)
{
    if (uploadImageBtn.HasFile)  //check if a file was uploaded by the user. 
    {
        //step 1: save at the server: 
            uploadImageBtn.SaveAs(Server.MapPath("~/uploadedImages/")  + uploadImageBtn.FileName); //working :)
            String fileName = uploadImageBtn.FileName;  //get the uploaded file name to store it in the database. 
        //get current date and time to insert them in DB:
            DateTime dateValue = Convert.ToDateTime (DateTime.Now.Date.ToString("dd/MM/yyy"));
            DateTime timeValue = Convert.ToDateTime ( DateTime.Now.ToString("hh:mm:ss"));


         string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
         SqlConnection con = new SqlConnection(connectionString);
         con.Open(); //open db

         string query2 = "insert into posts_tbl (postDate, postTime, postText, postVideo2, PostImage2, pUserName, boundPost) VALUES (@date,@time,@post,@video,@img,@userName,@boundPost)";

         SqlCommand command = new SqlCommand(query2, con); //build a command 
         command.Parameters.AddWithValue("@date", dateValue);
         command.Parameters.AddWithValue("@time", timeValue);
         command.Parameters.AddWithValue("@post", post_txt.Text);
         command.Parameters.AddWithValue("@video", "NULL");
         command.Parameters.AddWithValue("@img", fileName);
         command.Parameters.AddWithValue("@userName", "name");
         command.Parameters.AddWithValue("@boundPost", "NULL");

        int returned= command.ExecuteNonQuery(); //returns null

        con.Close();
        postsSource.DataBind();
        postsRepeater.DataBind(); 

    }//end if
}//end method

这是我使用数据源本身编写的代码:

postsSource.InsertCommandType= SqlDataSourceCommandType.Text;
postsSource.InsertCommand = "insert into posts_tbl (postDate, postTime, postText, postVideo2, PostImage2, pUserName, boundPost) VALUES (@date,@time,@post,@video,@img,@userName,@boundPost)";
postsSource.InsertParameters.Add("date", dateValue);
postsSource.InsertParameters.Add("time", timeValue);
postsSource.InsertParameters.Add("post", post_txt.Text.ToString());
postsSource.InsertParameters.Add("video", "Null");
postsSource.InsertParameters.Add("img", fileName);
postsSource.InsertParameters.Add("userName", "name");
postsSource.InsertParameters.Add("boundPost", "NULL");
postsSource.Insert();

postsSource.DataBind();
postsRepeater.DataBind();

然而,最后一种方法不允许将非字符串值分配给参数(例如 dateValue 和 timeValue,它们必须是 Datetime)。

谁能告诉我是什么导致了插入错误?而且,我是否正确更新了数据源和中继器?

谢谢。

在与 SteveA​​ndrei 讨论代码后,我发现了我的问题。

我正在向需要 int 数据类型的字段中插入空值。我刚刚从插入查询中删除了该字段,一切正常。

谢谢大家。