2016-11-08 125 views
1

我是c#和.net的新手,所以我將數據插入到數據庫中。連接到SQL Server並插入值

首先我創建了一個新項目 - asp.net web應用程序(v4.6.1)。然後我選擇了網頁表單模板。

web.config文件自動添加此行

<connectionStrings> 
    <add name="DefaultConnection" 
     connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-WebApplication7-20161108020707.mdf;Initial Catalog=aspnet-WebApplication7-20161108020707;Integrated Security=True" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 

所以這是我的數據庫連接。

我啓動了Microsoft SQL Server Management Studio。在左側,我有對象瀏覽器,我看到我的服務器(我的電腦 - 我使用Windows身份驗證)。有稱爲數據庫的文件夾。我右鍵單擊它並選擇新的數據庫...我創建了一個名爲test的新數據庫。然後,我擴展了測試數據庫並右鍵單擊表格文件夾並選擇了new-> table。我添加了2列。 id(int) - 非空和名稱(nchar(255)) - 非空。我添加了ID列作爲身份。我保存了表並將其命名爲測試。

現在在Visual Studio中我創建了Default.aspx頁面。

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication7._Default" %> 

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server"> 

<asp:TextBox ID="someBox" runat="server" placeholder="enter something"> </asp:TextBox> 

<asp:Button ID="clickMe" runat="server" text="click" onclick=clickMe_click /> 

</asp:Content> 

我加入Default.aspx.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Web.Configuration; 
using System.Data; 

namespace WebApplication7 
{ 
    public partial class _Default : Page 
    { 
     protected void clickMe_click(object sender, EventArgs e) 
     { 
     string txtBox = someBox.Text; 

     System.Data.SqlClient.SqlConnection sqlConnection1 = 
      new System.Data.SqlClient.SqlConnection("DefaultConnection"); 

     System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); 
     cmd.CommandType = System.Data.CommandType.Text; 
     cmd.CommandText = "INSERT testing (name) VALUES (txtBox)"; 
     cmd.Connection = sqlConnection1; 

     sqlConnection1.Open(); 
     cmd.ExecuteNonQuery(); 
     sqlConnection1.Close(); 
    } 
    } 
} 

我也試圖與該代碼中的點擊函數中:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString()); 

SqlCommand cmd = new SqlCommand(); 
cmd.CommandText = "INSERT INTO testing (name) VALUES (@name)"; 
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = txtBox; 
cmd.Connection = conn; 

conn.Open(); 
cmd.ExecuteNonQuery(); 
conn.Close(); 

刷新頁面,當我刷新表到SQL Server Management Studio並進行查詢:

select * from testing; 
GO 

它返回0行受影響並顯示空表。

我在做什麼錯?


編輯:

<connectionStrings> 
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-WebApplication3-20161105080932.mdf;Initial Catalog=aspnet-WebApplication3-20161105080932;Integrated Security=True" 
    providerName="System.Data.SqlClient" /> 
</connectionStrings> 

ASPNET-WebApplication3-20161105080932是在服務器對象資源管理器中我的數據庫名稱。在數據庫裏我創建了表測試。

這裏是我的CS代碼:

protected void clickMe_click(object sender, EventArgs e) 
    { 
     string txtBox = someBox.Text; 
     using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString())) 
     { 
      string sql = "INSERT INTO testing (name) VALUES (@name)"; 
      SqlCommand cmd = new SqlCommand(sql, conn); 
      cmd.Parameters.Add("name", SqlDbType.NVarChar).Value = txtBox; 
      int rowsAffected = cmd.ExecuteNonQuery(); 
      conn.Close(); 
     } 
    } 

但沒有任何反應。

+0

@不幸的是,他已經在做這件事了。查看發佈的代碼。 – Rahul

+0

string txtBox = someBox.Text; 我在這裏得到它到字符串txtBox,所以我在代碼的其他部分使用txtBox。 – KondukterCRO

回答

2

這是本地數據庫。在Visual Studion中,請轉至View > SQL Server Object Explorer > (LocalDb)\MSSQLLocalDB > aspnet-WebApplication7-20161108020707以查看數據庫的內容。無需啓動Microsoft SQL Server Management Studio。

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-WebApplication7-20161108020707.mdf;Initial Catalog=aspnet-WebApplication7-20161108020707;Integrated Security=True" 
    providerName="System.Data.SqlClient" /> 
</connectionStrings> 

創建到數據庫的連接時,使用using(...)塊進行正確處置。

 string txtBox = someBox.Text; 
     using(SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString)) 
     { 
      using(SqlCommand cmd = new SqlCommand()) 
      { 
       cmd.CommandType = CommandType.Text; 
       cmd.CommandText = "INSERT testing (name) VALUES (@name)"; 
       cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = txtBox; 
       cmd.Connection = conn; 
       conn.Open(); 
       int rowsAffected = cmd.ExecuteNonQuery(); 
      } 
     } 

樣本輸出:

Code

Data

+0

喜歡提及'使用(...)'塊。但是,打開連接沒有意義,儘管您稍後需要它。使用前打開連接。 – Rahul

+0

我現在明白了。所以我必須創建測試表到本地數據庫?我應該創建它到主數據庫或創建新的數據庫,然後在其中的表? 我的應用程序如何知道我需要哪個內部數據庫?它沒有在配置和代碼背後的任何地方設置。 – KondukterCRO

+0

@KondukterCRO由於您使用的是基於連接字符串的本地數據庫,因此您應該從那裏執行必要的步驟。連接上的初始目錄是指正在使用的數據庫。你不需要創建一個新的。您可以將連接字符串中的初始目錄重命名爲所需的數據庫名稱。在你的情況下,它目前被設置爲'aspnet-WebApplication7-20161108020707'。 –

1

看起來你正在檢查錯誤的地方。從您的連接字符串很顯然,您使用的是本地數據庫,如下圖所示,但你可以在其他數據庫中可能SSMS檢查

connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-WebApplication7-20161108020707.mdf; 

同樣,你的第二個發佈ADO.NET代碼是正確的,但你缺少的以下代碼行

cmd.CommandType = System.Data.CommandType.Text; 
+0

SqlCommand CommandType的默認值是文本。請參閱[SqlCommand.CommandType屬性](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtype(v = vs.110).aspx) –

+0

@Ephraim,但它是總是善於表達清楚。 – Rahul

2

這裏是做SQL查詢(只是我認爲)

using(SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"])) 
{ 
    string sql = "INSERT INTO testing (name) VALUES (@name)"; 
    SqlCommand cmd = new SqlCommand(sql, conn); 
    cmd.Parameter.Add(New SqlParameter("@name", txtBox.Text)); 
    int rowsAffected = cmd.ExecuteNonQuery(); 
    conn.Close(); 
} 

一些乾淨的代碼你也能拿受到Retu影響的列數cmd.ExecuteNonQuery的值。

我會檢查連接字符串這裏是一個鏈接 Here