ExcuteNonQuery在将数据插入数据库时返回null

本文关键字:返回 null 数据库 插入 数据 ExcuteNonQuery | 更新日期: 2023-09-27 18:24:58

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

1-获取用户在帖子区域输入的数据,如文本和图像(用户可以在帖子中上传图像)。

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

3-执行查询。

4-使用CCD_ 3更新CCD_。

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

由于某些原因,insert命令inserts不起作用。我尝试过使用典型的SqlConnection方法进行插入,SqlConnection方法带有参数查询(其中我使用参数而不是直接使用插入的post-info,例如@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)。

谁能告诉我插入错误的原因吗?以及,我是否正确更新了数据源和中继器?

谢谢。

ExcuteNonQuery在将数据插入数据库时返回null

在与SteveAndrei讨论代码后,我解决了问题。

我在一个需要int数据类型的字段中插入了一个null值。我刚刚从插入查询中删除了那个字段,一切都很好。

谢谢大家。