2

这个问题已经在这里问了好几次了。我阅读了发布的问题,但我仍然有问题。我正在尝试将值从 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 = "";
    }
}

任何帮助,将不胜感激。

4

6 回答 6

6

尝试这个:

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();
    }
}

这个对我有用。

于 2014-08-17T11:05:51.237 回答
3

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

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

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

finaly
{
   conn.Close();
}
于 2013-10-05T08:24:02.860 回答
0

尝试以下步骤:

第 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 

Step2:在需要的地方使用存储过程:

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. 可能会帮助您使用 connectionString

我希望能有所帮助

于 2014-08-17T11:49:10.770 回答
0

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

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

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

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

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

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

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

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

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

单击确定。

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

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

并检查此连接 asp.net 应用程序到 sql server Asp.net 连接到 SQL Server

于 2013-10-05T09:02:44.270 回答
0

实际上列表视图有一个默认的方法调用 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" />
于 2014-04-18T09:40:57.373 回答
0
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 = "";
}
于 2015-05-21T12:46:35.710 回答