2013-10-05 58 views
2

这个问题在这里被问了好几次。我阅读发布的问题,但我仍然有问题。我试图从ASP.Net窗体插入值到SQL Server。我创建了一个示例网站来将数据插入到Sql表中。 SQL数据库的名称是“TestDatabaseDB”,它有一个名为“Person”的表。人员表格有4列。他们是ID,FirstName,LastName,NationalID。 ID的类型是“int”。我设置了“是身份:是”。所以SQL将为每个插入的记录分配一个ID。它只是不起作用。当我点击按钮什么都没有发生。它必须将数据插入到数据库表中或至少清除文本框,但它不会。 我试图如何将数据从ASP.Net插入MS SQL Server?

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 = ""; 
    } 
} 

任何帮助,将不胜感激。

+2

“它没有工作”是从来没有足够的信息。大概你在某个时候会得到一个异常 - 如果你抓住并记录完整的话,你会得到更多的细节。 –

+0

你试过SqlConnection conn = new SqlConnection(“Data Source =。\ SQLExpress; Database = TestWebSiteDB; Integrated Security = true”);前提是您在运行应用程序的本地机器上使用SQLExpress作为数据库。否则改变“。”与该机器的IP地址。 –

+0

什么是您的Sql Server版本?(例如2008,2012 ..) – jdev

回答

3

您需要跟踪您得到的错误如下。因为没有实际的错误是无法帮助你的。

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

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

finaly 
{ 
    conn.Close(); 
} 
0

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

要创建一个SQL Server数据库

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

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

如果添加连接对话框打开,并且数据源不是微软SQL服务器,单击更改打开选择/更改数据源对话框

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

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

欲了解更多信息,请参见添加/修改连接(Microsoft SQL Server的)。

选择你想从下拉列表中连接到数据库。

单击确定。

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

上安装SQL Server更inforamtion看到 installing sql server express edition

,并检查该连接asp.net应用程序到SQL Server Asp.net connection to SQL Server

+0

我试图通过代码进行连接。我不想在VS上使用服务器资源管理器。 –

+0

我知道,但你应该首先找到你的连接字符串。您可以复制生成的连接字符串并将其粘贴到代码中。 – jdev

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" /> 
+0

对不起,在错误的页面发布 – user3548409

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

这对我的作品。

0

尝试以下步骤:

第一步:而不是把你在你的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. 不要把数据库相关的东西在C#文件
  2. 尽量选择对你的变量更好的名称(专为对照组)
  3. This可以帮助你的connectionString

我希望帮助

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 = ""; 
} 
相关问题