【问题标题】:How to insert data from ASP.Net to MS SQL Server?如何将数据从 ASP.Net 插入 MS SQL Server?
【发布时间】:2013-10-05 08:19:25
【问题描述】:

这个问题已经在这里问了好几次了。我阅读了发布的问题,但我仍然有问题。我正在尝试将值从 ASP.Net 表单插入到 SQL Server。我创建了一个示例网站来将数据插入到 Sql 表中。 SQL 数据库的名称是“TestDatabaseDB”,它有一个名为“Person”的表。人员表有 4 列。它们是 ID、FirstName、LastName、NationalID。 ID 的类型是“int”。我设置“是身份:是”。所以 SQL 会为每条插入的记录分配一个 ID。它只是行不通。当我单击按钮时,没有任何反应。它必须将数据插入数据库表或至少清除文本框,但事实并非如此。 我试过了

SqlConnection conn= new SqlConnection(@"Data source=.\SQLEXPRESS; AttachDBFilename=""|DataDirectory|\TestWebSiteDB.mdf""; integrated user=true; User Instance=true") 

没有用。所以我把它改成了:

SqlConnection conn = new SqlConnection("Data Source=. ; Database=TestWebSiteDB; Integrated Security=true");

没有任何区别。这是我的代码:

using System;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void btnRegister_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection("Data Source=. ; Database=TestWebSiteDB; Integrated Security=true");
        SqlCommand insert = new SqlCommand("insert into Person(FirstName, LastName, NationalID) values(@Name, @Surname, @ID)" ,conn);
        insert.Parameters.AddWithValue("@Name", txtboxName.Text);
        insert.Parameters.AddWithValue("@Surname", txtboxFamilyName.Text);
        insert.Parameters.AddWithValue("@ID", txtboxNationalCode.Text);
        try
        {
            conn.Open();
            insert.ExecuteNonQuery();
        }
        catch
        {
            LMsg.Text="Error when saving on database";
            conn.Close();
        }
        txtboxName.Text="";
        txtboxFamilyName.Text = "";
        txtboxNationalCode.Text = "";
    }
}

任何帮助将不胜感激。

【问题讨论】:

  • “它没有用”永远是不够的信息。大概您在某个时候遇到了异常 - 如果您捕获并完整记录它,您将获得更多详细信息。
  • 你试过 SqlConnection conn = new SqlConnection("Data Source=.\SQLExpress ; Database=TestWebSiteDB; Integrated Security=true");前提是您使用 SQLExpress 作为运行应用程序的本地计算机上的数据库。否则更改“。”使用该机器的 IP 地址。
  • 您的 Sql Server 版本是多少?(例如 2008、2012..)
  • 先去掉try catch,这样我们就可以从页面中识别出错误了。
  • @JonSkeet 好吧,我的意思是“它不起作用”。因为我没有得到任何错误。单击注册按钮时它只是不插入数据。

标签: c# asp.net sql sql-server


【解决方案1】:

试试这个:

protected void Register_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\DB_Users.mdf;Integrated Security=True");
    SqlCommand insert = new SqlCommand("insert into tbl_users(name, username, password,email) values(@name, @username, @password,@email)", conn);
    insert.Parameters.AddWithValue("@name", txtname.Text);
    insert.Parameters.AddWithValue("@username", txtusername.Text);
    insert.Parameters.AddWithValue("@password", txtpassword.Text);
    insert.Parameters.AddWithValue("@email", txtemail.Text);
    try
    {
        conn.Open();
        insert.ExecuteNonQuery();
        lbl_msg.Text = "Register done !";
      //lbl_msg.Text = "ثبت نام با موفقیت انجام شد";
    }
    catch (Exception ex)
    {
        lbl_msg.Text = "Error: "+ex.Message;
      //lbl_msg.Text = "خطا در ارتباط با پایگاه داده";
        conn.Close();
    }
}

它对我有用。

【讨论】:

    【解决方案2】:

    您需要跟踪您遇到的错误,如下所示。因为没有实际错误就无法帮助您。

    catch(Exception ex)
        {
            LMsg.Text=ex.Message;
        }
    

    您还需要在代码中使用 finally 来关闭连接,而不是将其关闭到 catch 块中。

    finaly
    {
       conn.Close();
    }
    

    【讨论】:

      【解决方案3】:

      检查您的连接字符串。在 conn.open() 你得到异常?

      创建与 SQL Server 数据库的数据连接

      在服务器资源管理器/数据库资源管理器中单击连接到数据库。

      在“选择数据源”对话框中,选择 Microsoft SQL Server,然后单击“确定”。

      如果“添加连接”对话框打开,并且数据源不是 Microsoft SQL Server,请单击“更改”以打开“选择/更改数据源”对话框

      。有关详细信息,请参阅选择/更改数据源对话框。 从下拉列表中选择服务器名称,或键入要访问的数据库所在的服务器名称。

      根据您的数据库或应用程序的要求,选择 Windows 身份验证或使用特定的用户名和密码登录 SQL Server(SQL Server 身份验证)。

      有关详细信息,请参阅添加/修改连接 (Microsoft SQL Server)。

      从下拉列表中选择要连接的数据库。

      点击确定。

      然后将生成的连接字符串复制到您的程序中。 当您安装 sql server 时,服务器名称和您选择安装的设置会影响您的连接字符串。

      有关安装 sql server 的更多信息,请参阅 installing sql server express edition

      并检查这个以将 asp.net 应用程序连接到 sql server Asp.net connection to SQL Server

      【讨论】:

      • 我正在尝试通过代码建立连接。我不想在 VS 上使用服务器资源管理器。
      • 我知道,但您应该首先找到您的连接字符串。您可以复制生成的连接字符串并将其粘贴到您的代码中。
      【解决方案4】:

      实际上列表视图有一个默认的方法调用onsorting。它将自动对列表视图进行排序。 onsorting 将调用如下函数。该函数无需放置任何语句。

      protected void Sorting(object sender,ListViewSortEventArgs e)
      {
      
      }
      

      对于列表视图中的链接按钮,您只需像这样放置标签:

      <asp:ListView ID="DisplayContent" runat="server" onSorting="Sorting">
      <asp:LinkButton ID="Name" runat="server" CommandName="Sorting" CommandArgument="Name" Text="Name" />
      

      【讨论】:

        【解决方案5】:

        尝试以下步骤:

        第 1 步:与其将查询放在 C# 文件中,不如为它声明一个存储过程,如下所示:

        CREATE PROCEDURE [dbo].[ADD_PERSON_SP]
            /*Type of this variables should be their column types*/
            @firstName varchar(MAX),
            @lastName varchar(MAX),
            @nationalID varchar(MAX)
        AS
        BEGIN
            INSERT INTO [dbo].[Person] (FirstName, LastName, NationalID)
                   VALUES (@firstName,@lastName,@nationalID)
        END 
        

        第二步:在需要的地方使用存储过程:

        SqlConnection con = new SqlConnection(connectionString);
        SqlCommand com = new SqlCommand("ADD_PERSON_SP", con);
        com.Parameters.AddWithValue("@firstName", txtboxName.Text);
        com.Parameters.AddWithValue("@lastName", txtboxFamilyName.Text);
        com.Parameters.AddWithValue("@nationalID", txtboxNationalCode.Text);
        com.CommandType = CommandType.StoredProcedure;
        try
        {
            con.Open();
            com.ExecuteNonQuery();
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            if (con.State == ConnectionState.Open)
                con.Close();
        }
        

        请记住:

        1. 不要将 db 相关的东西放在你的 C# 文件中
        2. 尝试为变量选择更好的名称(特别是控件)
        3. This 可以帮助你连接字符串

        希望对你有帮助

        【讨论】:

          【解决方案6】:
          protected void btnRegister_Click(object sender, EventArgs e)
          {
              SqlConnection conn = new SqlConnection("Data Source=. ; Database=TestWebSiteDB; Integrated Security=true");
              SqlDataAdapter dap = new SqlDataAdapter("insert into Person(FirstName, LastName, NationalID) values(@Name, @Surname, @ID)", con);
              dap.InsertCommand(txtboxName.Text, txtboxFamilyName.Text,txtboxNationalCode.Text);
          
              txtboxName.Text="";
              txtboxFamilyName.Text = "";
              txtboxNationalCode.Text = "";
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-01-10
            • 2021-07-27
            • 1970-01-01
            • 1970-01-01
            • 2016-07-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多