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)。
谁能告诉我是什么导致了插入错误?而且,我是否正确更新了数据源和中继器?
谢谢。
在与 Steve 和 Andrei 讨论代码后,我发现了我的问题。
我正在向需要 int 数据类型的字段中插入空值。我刚刚从插入查询中删除了该字段,一切正常。
谢谢大家。
我有一个显示用户 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)。
谁能告诉我是什么导致了插入错误?而且,我是否正确更新了数据源和中继器?
谢谢。
在与 Steve 和 Andrei 讨论代码后,我发现了我的问题。
我正在向需要 int 数据类型的字段中插入空值。我刚刚从插入查询中删除了该字段,一切正常。
谢谢大家。