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)。
谁能告诉我插入错误的原因吗?以及,我是否正确更新了数据源和中继器?
谢谢。
在与Steve和Andrei讨论代码后,我解决了问题。
我在一个需要int数据类型的字段中插入了一个null值。我刚刚从插入查询中删除了那个字段,一切都很好。
谢谢大家。