2013-10-05 57 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 = ""; 
} 
相關問題