2014-09-24 64 views
1

是否有可能在C#中執行任何類型的原始SQL命令(SELECT,UPDATE,DELETE ....)。我期望添加一個類似於SQL Server Management Studio查詢窗口的功能,我可以在其中輸入任何SQL命令並執行它。在我的情況下,我不擔心sql注入,我知道這個功能的風險。所有連接參數都傳遞給我(我有一個有效的連接字符串),但我對數據庫本身一無所知。在我得到命令之前,SQL命令在語法上也是正確的。我似乎無法找到可以在所有情況下都能正常工作的解決方案,可能只是忽略了明顯的解決方案。執行任何原始SQL查詢

+2

當然,這是可能的。 – 2014-09-24 02:52:01

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2014-09-24 03:37:46

+0

我建議爲它使用精簡版:http://www.nuget.org/packages/Dapper/ – razon 2014-09-24 06:52:37

回答

1

您可以簡單地使用ADO .NET和顯示查詢的結果,如果它成功,或不執行,只是把下面的代碼在事件處理程序中,當要執行查詢:

using (SqlConnection conn = ConnectionClass.GetInstance().Connection()) 
using (SqlCommand cmd = new SqlCommand(TextBoxQuery.Text, conn)) 
{ 
    conn.Open(); 
    TextBoxNoOfRowEffected.Text = cmd.ExecuteNonQuery().ToString(); 
} 

SqlCommand.ExecuteNonQuery() Documentation

+0

我不想要結果,我只想運行查詢。我不會傳回任何結果。這更適用於更新,刪除和添加條件。我不認爲會有任何Select語句傳遞給我。 – 2014-09-24 02:37:03

+0

檢查編輯... – 2014-09-24 02:49:29

1

下面是一個ADO比如你

using System; 
using System.Data; 
using System.Data.SqlClient; 

class Program 
{ 
static void Main() 
{ 
    string connectionString = 
     "Data Source=(local);Initial Catalog=Northwind;" 
     + "Integrated Security=true"; 

    // Provide the query string with a parameter placeholder. 
    string queryString = 
     "UPDATE [dbo].[USR_Users] SET [Active] = 1 WHERE Id = 1"; 


    using (SqlConnection connection = 
     new SqlConnection(connectionString)) 
    { 
     SqlCommand command = new SqlCommand(queryString, connection); 


     try 
     { 
      connection.Open(); 
      command.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     Console.ReadLine(); 
    } 
} 
+0

即使用戶執行select語句,此工作是否也能正常工作?我的意思是我真的只想要使用查詢字符串而不必添加參數。我被傳遞了這樣的東西:UPDATE [dbo]。[USR_Users] SET [Active] = 1 WHERE Id = 1 – 2014-09-24 02:21:14

+0

是的,它也可以不用參數 – Tim 2014-09-24 02:47:23

+0

你真的應該處置SqlCommand實例。 – 2014-09-24 03:11:15