2012-05-22 60 views
4

我對C#非常陌生。我試圖檢索使用的列數:檢索SQL表中的列數 - C#

SELECT count(*) FROM sys.columns 

您能解釋一下如何使用該命令並將其放入一個變量中。

回答

1
string connectionString = 
      "Data Source=(local);Initial Catalog=Northwind;" 
      + "Integrated Security=true"; 

     // Provide the query string with a parameter placeholder. 
     string queryString = 
      "SELECT Count(*) from sys.columns"; 

     // Specify the parameter value. 
     int paramValue = 5; 

     // Create and open the connection in a using block. This 
     // ensures that all resources will be closed and disposed 
     // when the code exits. 
     using (SqlConnection connection = 
      new SqlConnection(connectionString)) 
     { 
      // Create the Command and Parameter objects. 
      SqlCommand command = new SqlCommand(queryString, connection); 

      // Open the connection in a try/catch block. 
      // Create and execute the DataReader, writing the result 
      // set to the console window. 
      try 
      { 
       connection.Open(); 
       SqlDataReader reader = command.ExecuteReader(); 
       while (reader.Read()) 
       { 
        Console.WriteLine("\t{0}", 
         reader[0]); 
       } 
       reader.Close(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
      Console.ReadLine(); 
     } 
+0

什麼是'paramValue'? – samjudson

+0

感謝您的幫助。如何將列數轉換爲整數以用於隨機命令? – liamp47

+0

@ liamp47,看看其他人(達倫戴維斯,aleroot,痛風)回答他們所有的轉換。 – gout

0

使用ExecuteScalar

執行查詢,並在查詢返回的結果集返回第一行的第一列。其他列或行將被忽略。

Int32 colnumber = 0; 
string sql = "SELECT count(*) FROM sys.columns"; 
using (SqlConnection conn = new SqlConnection(connString)) 
{ 
    SqlCommand cmd = new SqlCommand(sql, conn); 
    try 
    { 
     conn.Open(); 
     colnumber = (Int32)cmd.ExecuteScalar(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 
1

使用的ExecuteScalar(:從MSDN的例子。

using (SqlConnection con = new SqlConnection(ConnectionString)) //for connecting to database 
      { 
       con.Open(); 
       try 
       { 
        using (SqlCommand getchild = new SqlCommand("select count(*) from table1 ", con)) //SQL queries 
        { 
         Int32 count = (Int32)getchild.ExecuteScalar(); 
        } 
       } 
      } 
1

你必須使用一個命令和檢索後面的標量變量:

SqlCommand cmd = new SqlCommand(sql, conn); 
Int32 count = (Int32)cmd.ExecuteScalar(); 
4

您將需要使用ExecuteScalar因爲其他人說。此外,您需要在object_id列上過濾SELECT以獲取特定表中的列。

SELECT count(*) FROM sys.columns WHERE object_id = OBJECT_ID(N'table_name') 

或者,你可以做的比自己熟悉ANSI-standard INFORMATION_SCHEMA views找到一個面向未來的相同的信息,跨RDBMS的方式更糟。

0

您將要在System.Data.SqlClient命名空間中使用ADO .NET函數。當您只想獲得單一結果時,ExecuteScalar是一種易於使用的方法。對於多個結果,您可以使用SqlDataReader。

using System.Data.SqlClient; 
string resultVar = String.Empty; 
string ServerName="localhost"; 
string DatabaseName="foo"; 
     SqlConnection conn=new SqlConnection(String.Format("Data Source={0};Initial Catalog={1};Integrated Security=SSPI",ServerName,DatabaseName)); 
     SqlCommand cmd=new SqlCommand(Query,conn); 
     try 
     { 
      conn.Open(); 
     } 
     catch (SqlException se) 
     { 
      throw new InvalidOperationException(String.Format(
       "Connection error: {0} Num:{1} State:{2}", 
       se.Message,se.Number, se.State)); 
     } 
     resultVar = (string)cmd.ExecuteScalar().ToString(); 
     conn.Close(); 
+3

在調用ToString()之後,不需要將其轉換爲(字符串)。 – samjudson

+0

哈哈是啊。你聽說我萊克鑄造弦... –