2014-09-24 62 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