将数据插入SQL Server不起作用,但没有错误消息可显示



我正在使用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));

没有错误,但目录不会创建!

最新更新