【问题标题】:How to T-SQL SELECT into C# variables如何将 T-SQL SELECT 转换为 C# 变量
【发布时间】:2012-06-11 10:48:48
【问题描述】:

我正在使用 SQL Server 2008 R2 和 C# ASP.NET 4

我有一个名为 myTable 的简化表,包括以下列: Col1, Col2, Col3, Col4

CREATE TABLE [dbo].[myTable](
    [Col1] [int] NULL,
    [Col2] [int] NULL,
    [Col3] [nvarchar](50) NULL,
    [Col4] [int] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[myTable] ([Col1], [Col2], [Col3], [Col4]) VALUES (0, 0, N'@', 0)
INSERT [dbo].[myTable] ([Col1], [Col2], [Col3], [Col4]) VALUES (1, 2, N'c', 4)
INSERT [dbo].[myTable] ([Col1], [Col2], [Col3], [Col4]) VALUES (11, 22, N'cc', 44)

(原来的表要宽很多)

如何将SELECT 两列(或 20 或 200)列转换为 C# 变量或变量数组/列表,或任何其他有效或优于类似方法的内容:

object obj = new object();
string sql = "SELECT Col2, Col3 FROM myTable WHERE Col1=0";
using (SqlConnection conn = new SqlConnection(mySqlCalss.DatabaseConnectionString() ))
            {
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Connection.Open();
                obj = cmd.ExecuteNonQuery();
            }

在某种程度上我可以使用类似的东西:

int myVar1 = (int)ojb[0];
string myVar2 = (string)obj[1];

然后:

lblMyASPlable1.Text = myVar1.ToString();
lblMyASPlable2.Text = myVar2;

?

【问题讨论】:

  • 您是否查找过 ADO.NET 教程?这是一项广泛涵盖的基本任务。

标签: c# asp.net sql-server-2008


【解决方案1】:

您正在使用“ExecuteNonQuery”,它执行它在锡上所说的并且不会像查询(即选择)那样执行。试试 ExecuteReader。

SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
    Console.WriteLine(String.Format("{0}", reader[0]));
}

【讨论】:

  • 不能写Line,是asp.net网页,需要变量,演示是额外的。
  • 然后忽略WriteLine。提取值的是 reader[0] 部分
【解决方案2】:

使用读入DataReadersee Datareader in action

【讨论】:

    【解决方案3】:

    你需要SQLDataAdapter

    DataTable table = new DataTable();
    string sql = "SELECT Col2, Col3 FROM myTable WHERE Col1=0";
    using (SqlConnection conn = new SqlConnection(mySqlCalss.DatabaseConnectionString() ))
    {
       SqlCommand cmd = new SqlCommand(sql, conn);
       cmd.Connection.Open();
       SqlDataAdapter adapter = new SqlDataAdapter(cmd);
       adapter.Fill(table);                
    }
    

    还有

    int myVar1;
    string myVar2;
    if(table.Rows.Count>0)
    {
      myVar1 = (int)table.Rows[0]["Col2"];
      myVar2 = (string)table.Rows[0]["Col3"];
    } 
    

    【讨论】:

    • @Asif- 我没有找到 ExecuteQuery。我收到此错误消息:无法使用 [] 将索引应用于“对象”类型的表达式
    • 不要定义obj,而是使用var = cmd.ExecuteQuery();
    • @Asif- 我仍然收到以下错误消息,我缺少什么:'System.Data.SqlClient.SqlCommand' 不包含'ExecuteQuery' 的定义并且没有扩展方法'ExecuteQuery'可以找到接受“System.Data.SqlClient.SqlCommand”类型的第一个参数(您是否缺少 using 指令或程序集引用?)
    • myVar1 = (int)table.Rows[0][0]
    • 谢谢,它有效!您是否知道一种设置名称以使用它的方法,例如 myVar1=(int)table.Rows[0]['Col2'] ... 那么它就像有意义的变量一样。
    【解决方案4】:

    您可能想研究像 dapper 这样的 MicroORM

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多