我正在使用ASP.NET 4.5和SQL Server 2008 Express。
我想将表单的数据插入我的数据库中,连接字符串还可以,并且在另一个页面中工作,但是在此页面中,插入按钮似乎只是刷新页面而没有插入!
代码:
protected void Button1_Click(object sender, EventArgs e)
{
var conn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
var cmdd = "insert into poroje (Pname,Pmozu,Ppayan,StartDate,EndTime,makan,tozih) values(@Pname,@Pmozu,@Ppayan,@StartDate,@EndTime,@makan,@tozih)";
using (SqlConnection cnn = new SqlConnection(conn))
{
using (SqlCommand cmd = new SqlCommand(cmdd, cnn))
{
if (aksporoje.HasFile)
{
if (CheckFileType(aksporoje.FileName))
{
PersianCalendar Pe = new PersianCalendar();
string s = Pe.GetYear(System.DateTime.Now).ToString();
if (Directory.Exists("~/poroje/"+s))
{
Directory.CreateDirectory(Server.MapPath("~/poroje/" + s+pushePoroje(System.DateTime.Today)));
string filePath = "~/poroje/" + s + "/" + pushePoroje(System.DateTime.Today) + "/" + aksporoje.FileName;
aksporoje.SaveAs(MapPath(filePath));
cmd.Parameters.AddWithValue("@aks","poroje/"+ s + "/" + pushePoroje(System.DateTime.Today) + "/" + aksporoje.FileName);
}
else {
Directory.CreateDirectory(Server.MapPath("~/poroje/"+s));
Directory.CreateDirectory(Server.MapPath("~/poroje/"+s+ pushePoroje(System.DateTime.Today)));
string filePath = "~/poroje/" + s + "/" + pushePoroje(System.DateTime.Today) + "/" + aksporoje.FileName;
aksporoje.SaveAs(MapPath(filePath));
cmd.Parameters.AddWithValue("@aks", "poroje/" + s + "/" + pushePoroje(System.DateTime.Today) + "/" + aksporoje.FileName);
}
}
}
cmd.Parameters.AddWithValue("@Pname", txtnam.Text);
cmd.Parameters.AddWithValue("@Pmozu", txtmozu.Text);
cmd.Parameters.AddWithValue("@Ppayan",false);
cmd.Parameters.AddWithValue("@StartDate",PersianDateTextBox1.Text);
cmd.Parameters.AddWithValue("@EndTime",null);
cmd.Parameters.AddWithValue("@makan", txtmakan.Text);
cmd.Parameters.AddWithValue("@tozih", txttozih.Text);
try
{
cnn.Open();
int recordsAffected = cmd.ExecuteNonQuery();
}
catch (SqlException)
{
lblpeygham.Visible = true;
lblpeygham.Text = "error";
}
finally
{
cnn.Close();
lblpeygham.Visible = true;
lblpeygham.Text = "data inserted";
}
}
}
当我单击按钮时,页面刷新AMD向我显示"插入的数据"消息。但是,当我检查数据库时,什么也不会插入!你能帮我吗?
在实例化SQL命令对象之前,需要打开连接。
我敢打赌,cnn.open正在消除任何设置。
请参阅本文,以获取正确的工作代码。这是事件的正确顺序。
1 - Open connection object
2 - Declare string
3 - Open Command object
4 - Set parameters
5 - Call Execute Non SQL
6 - Close command object
7 - Close Connection object
asp.net插入从文本框到数据库的数据
另外,在代码中放一个断点,检查返回值。
祝你好运
J
将整个SQL命令放入直接在服务器上的字符串中。会发生什么?添加了值吗?如果是这样,请再次检查代码。那应该对您有很大帮助。
我认为这是错误的。
int recordsAffected = cmd.ExecuteNonQuery();
我从来没有从int上运行命令执行。应该像
cmd.ExecuteNonQuery();
即使那样,我认为您想要尝试中的所有东西。.
try
{
cnn.Open();
var cmdd = "insert into poroje (Pname,Pmozu,Ppayan,StartDate,EndTime,makan,tozih) values(@Pname,@Pmozu,@Ppayan,@StartDate,@EndTime,@makan,@tozih)";
using (SqlConnection cnn = new SqlConnection(conn))
{
using (SqlCommand cmd = new SqlCommand(cmdd, cnn))
{
if (aksporoje.HasFile)
{
if (CheckFileType(aksporoje.FileName))
{
PersianCalendar Pe = new PersianCalendar();
string s = Pe.GetYear(System.DateTime.Now).ToString();
if (Directory.Exists("~/poroje/"+s))
{
Directory.CreateDirectory(Server.MapPath("~/poroje/" + s+pushePoroje(System.DateTime.Today)));
string filePath = "~/poroje/" + s + "/" + pushePoroje(System.DateTime.Today) + "/" + aksporoje.FileName;
aksporoje.SaveAs(MapPath(filePath));
cmd.Parameters.AddWithValue("@aks","poroje/"+ s + "/" + pushePoroje(System.DateTime.Today) + "/" + aksporoje.FileName);
}
else {
Directory.CreateDirectory(Server.MapPath("~/poroje/"+s));
Directory.CreateDirectory(Server.MapPath("~/poroje/"+s+ pushePoroje(System.DateTime.Today)));
string filePath = "~/poroje/" + s + "/" + pushePoroje(System.DateTime.Today) + "/" + aksporoje.FileName;
aksporoje.SaveAs(MapPath(filePath));
cmd.Parameters.AddWithValue("@aks", "poroje/" + s + "/" + pushePoroje(System.DateTime.Today) + "/" + aksporoje.FileName);
}
}
}
cmd.Parameters.AddWithValue("@Pname", txtnam.Text);
cmd.Parameters.AddWithValue("@Pmozu", txtmozu.Text);
cmd.Parameters.AddWithValue("@Ppayan",false);
cmd.Parameters.AddWithValue("@StartDate",PersianDateTextBox1.Text);
cmd.Parameters.AddWithValue("@EndTime",null);
cmd.Parameters.AddWithValue("@makan", txtmakan.Text);
cmd.Parameters.AddWithValue("@tozih", txttozih.Text);
cmd.ExecuteNonQuery();
}
catch (SqlException)
{
lblpeygham.Visible = true;
lblpeygham.Text = "error";
}
finally
{
cnn.Close();
lblpeygham.Visible = true;
lblpeygham.Text = "data inserted";
}
类似的事情应该起作用。但是我认为主要问题是上面提到的第一个问题。
希望这会有所帮助。
谢谢大家!我更改此部分
catch (SqlException)
{
lblpeygham.Visible = true;
lblpeygham.Text = "error";
}
to
catch (SqlException ex)
{
lblpeygham.Visible = true;
lblpeygham.Text = ex.message;
}
并了解数据核心中的StartDate类型是DateTime,但我在其中插入了NVARCHAR!但是现在我有一个新问题。我想在主机中创建带有年份的新文件夹,但是如果我写
Directory.CreateDirector("~/poroje/"+s);
访问拒绝错误发生。如果我使用
Directory.CreateDirectory(Server.MapPath("~/poroje/"+s));
没有错误,但目录不会创建!