2014-03-06 21 views
0

我是新來的.Net和C#,我一直在努力讓我的頭在如何利用一段代碼中創建的SQL連接和在另一箇中使用它。我的表單上有2個按鈕。一個連接到數據庫,另一個插入到一個表中。插入表格時如何使用連接變量?如何使我的sql連接可用於同一類別的其他部分

我希望這是有道理的。由於

namespace SQL 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

    private void btnConnect_Click(object sender, EventArgs e) 
    { 

     SqlOperations connect = new SqlOperations(); 
     connect.connectToSQL("server=localhost\\SQLExpress;", "database=Cromwell; "); 
    } 

    private void btnAddToDatabase_Click(object sender, EventArgs e) 
    { 
     SqlOperations addToTable = new SqlOperations(); 
     addToTable.InsertToTable("InputDir", "C:\\"); 

    } 

} 


public class SqlOperations 
{ 

    public bool connectToSQL(string sqlHost, string database) 
    { 

     SqlConnection SqlConnect = new SqlConnection("user id=userid;" + 
            "password=validpassword;" + sqlHost + 
            "Trusted_Connection=yes;" + 
            database + "connection timeout=30"); 

     try 
     { 
      SqlConnect.Open(); 
      MessageBox.Show("Connected to SQL Express"); 

      return true; 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.ToString()); 
      return false; 
     } 

    } 

    public bool InsertToTable(string columnName, string value) 
    { 

     SqlCommand myCommand = new SqlCommand(); 

     myCommand.Connection = **SqlConnect**; // THIS BIT COMPLAINS 

     myCommand.CommandText = "INSERT INTO Config (" + columnName + ") " + 
        "Values ('" + value + "')"; 

    } 
} 

}

+0

你可以聲明連接作爲一個全局變量,但我會提前反對它。不要將連接打開時間超過實際操作所需的時間。在INSERT之前打開它,然後關閉。 –

+0

它看起來像你試圖實現的模式在這裏描述得很好:http://stackoverflow.com/a/7911659/328193 – David

回答

0

檢查這個環節,http://www.codeproject.com/Articles/4416/Beginners-guide-to-accessing-SQL-Server-through-C。這是一個使用c#.NET訪問SQL數據庫的初學者指南。

您也可以在web.config或app.config中添加連接字符串,然後從c#代碼訪問它。

 
C# 

// Add a reference at the top of your code file 

using System.Configuration; 

// Within the code body set your variable 

string cs = ConfigurationManager.ConnectionStrings["connectionStringName"].ConnectionString; 

顯然記得在你的web.config添加這個(用自己的連接字符串)

<connectionStrings> 
<add name="ConnStringDb1" connectionString="Data Source=localhost;Initial Catalog=YourDataBaseName;Integrated Security=True;" providerName="System.Data.SqlClient" /> 

+0

感謝您的這個。如果你使用配置文件,這是否意味着你可以改變它們,程序將使用新的值而不需要重新編譯,或者你需要重新發布你的項目以使更改生效? – gogi

+0

如果更改web.config,項目將自動重新編譯。準備好後,是的,它會採取新的變化。 – Mez

+0

好東西,謝謝 – gogi

3

解決方案1:您可以創建連接字符串作爲constant字符串變量和使用class名從徘徊無論你需要它作爲常數變量是隱含static(你可以訪問它們訪問爲全局變量)

試試這個:

Class MyConnectionString 
{ 
const string strCon="user id=userid;password=validpassword; 
        server=localhost\\SQLExpress;database=Cromwell; 
        Trusted_Connection=yes;connection timeout=30"; 
} 

而訪問:

SqlConnection scon=new SqlConnection(MyConnectionString.strCon); 

解決方案2:

Configuration file和訪問它創建的連接字符串。

<connectionStrings> 
<add name="myConString" 
connectionString="user id=userid;password=validpassword; 
        server=localhost\\SQLExpress;database=Cromwell; 
        Trusted_Connection=yes;connection timeout=30" /> 
</connectionStrings> 

使用它,只要你需要它:

string ConnectionString = 
ConnfigurationManager.ConnectionStrings["myConString"].ConnectionString; 
+0

感謝您的建議,我不知道配置文件:-) – gogi

0

我喜歡你已經定義的類連接到SQL。您可以使用該類來管理SQL連接的生命週期,這是一件好事。如果它也處理連接證書也會很好,因此您的呼叫者不必知道它是什麼。這個怎麼樣:

public class SqlOperations 
{ 
    private SqlConnection Connect() 
    { 
     ... Get SQL credentials here 
     ... Open and return connection here 
    } 

    public bool InsertToTable(string columnName, string value) 
    { 
     using (var conn = Connect()) 
     { 
      using (SqlCommand myCommand = new SqlCommand()) 
      { 
       myCommand.Connection = conn; 
       ... do your myCommand stuff here 
      } 
     } 
    } 
} 

然後在你的表單溝溝連接到數據庫按鈕 - 它爲您管理!所有你需要的是你的插入按鈕與這個事件:

private void btnAddToDatabase_Click(object sender, EventArgs e) 
{ 
    SqlOperations addToTable = new SqlOperations(); 
    addToTable.InsertToTable("InputDir", "C:\\"); 
} 
+0

現在,這是非常有意義的,我在這裏得到了一些很好的建議,我欣賞所有給出的輸入。謝謝 – gogi

相關問題