【问题标题】:C# - Using A String Passed Through A Parameter In StringC# - 使用通过字符串中的参数传递的字符串
【发布时间】:2016-07-22 01:32:51
【问题描述】:

我想实现这个:

public void SQLInfo(string column)
{
    SqlConnection Connect = new SqlConnection(
        "Server=server;Database=db;User ID=user;Password=pass;");
    Connect.Open();        
    SqlCommand com = new SqlCommand(
        "select distinct [column] from [dbo].[ServerAttributes]");
    SqlDataReader reader = com.ExecuteReader();
}

我没有找到这方面的文档。是否有任何特定方法可以使用通过字符串中的参数传递的字符串?例如,在 Powershell 中,您可以使用“$”来表示字符串中的变量。 “这是您正在开发的 $server。”

【问题讨论】:

  • 你很可能真的不想这样做,因为如果column可以通过用户输入(它可能可以)。
  • 您正在寻找字符串连接的奇迹。
  • @DavidL 我不希望通过用户输入提供它,因为我正在尝试自动化这个过程。除非需要更改,否则我只使用少数几列将保持固定。
  • 如果在循环中调用 SQLInfo,请使用 StringBuilder ... 归功于 @DavidL ... 如果有人为您的列输入输入“1;delete *”,那么您将面临一些严重的问题哭泣时间。

标签: c#


【解决方案1】:

是的,您可以使用string.Format() 喜欢

public void SQLInfo(string column)
        {
  string query = string.Format("select distinct {0} from [dbo].[ServerAttributes]", column);
  SqlCommand com = new SqlCommand(query);
  SqlDataReader reader = com.ExecuteReader();

【讨论】:

    【解决方案2】:

    使用低于 6 的 C# 时使用字符串格式化程序

    string command = string.Format("SELECT DISTINCT[{0}] FROM[dbo].[ServerAttributes]", column);
    

    对于 C#6,您有字符串文字运算符$,它被转换为与以前版本相同的逻辑,但使代码更具可读性。

    string command = $"SELECT DISTINCT[{column}] FROM[dbo].[ServerAttributes];
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 C# 6,则可以使用字符串插值

      public void SQLInfo(string column)
      {
          SqlConnection Connect = new SqlConnection(
              "Server=server;Database=db;User ID=user;Password=pass;");
          Connect.Open();        
          SqlCommand com = new SqlCommand(
              $"select distinct [{column}] from [dbo].[ServerAttributes]");
          SqlDataReader reader = com.ExecuteReader();
      }
      

      否则使用string.Format

      public void SQLInfo(string column)
      {
          SqlConnection Connect = new SqlConnection(
              "Server=server;Database=db;User ID=user;Password=pass;");
          Connect.Open();        
          SqlCommand com = new SqlCommand(
              string.Format("select distinct [{0}] from [dbo].[ServerAttributes]",column));
          SqlDataReader reader = com.ExecuteReader();
      }
      

      注意如果您要做这样的事情,建议至少检查以确保字符串没有引入“[”字符

      column = column.Remove("]");
      

      【讨论】:

        猜你喜欢
        • 2014-08-11
        • 2017-07-25
        • 2016-07-05
        • 1970-01-01
        • 2016-10-26
        • 1970-01-01
        • 1970-01-01
        • 2018-08-13
        • 2010-12-24
        相关资源
        最近更新 更多