2017-06-13 66 views
0

我想选择使用c#的表列属性。我写了这段代码。我的查询正在处理sqlserver。但我不会在C#中获得最大长度。C#选择Transact-SQL(表列属性)

我的查询是这里

//TableName:Contents, ColumnName : Title 
select Col_Length('Contents','Title') as columnLengthh 

结果是在这里:

enter image description here

我的C#代码这里:

string columnLength = "select Col_Length('Contents','Title') as columnLengthh"; 
        adapter = new SqlDataAdapter(columnLength, connection); 
        dataSet = new DataSet(); 
        adapter.Fill(dataSet); 
        DataTable dataTable2 = dataSet.Tables[0]; 
        foreach (DataRow row in dataTable2.Rows) 
        { 
         var x = row["columnLengthh"].ToString(); 
        } 

结果(x = -1)

如何在c#中获得长度。

请帮忙!

+0

你的语句返回一个值,你不应该使用适配器/数据集,而只需调用command.ExecuteScalar() –

+0

检查您的连接。除了创建Dataset和DataTable的不必要开销外,我在代码中看到没有错误。 -1是COLLENGTH()值的合法值:对于使用最大说明符('varchar(max)')声明的varchar类型的列,“COL_LENGTH”返回值-1。 – Serg

回答

2

检查你的查询是否正确

更改ConnectionString,以匹配你所拥有的 - 例如:

string connectionString = @"server=localhost\mysqlserver;database=master;Trusted_Connection=True;"; 

,并使用下面的代码:

 string queryString = "select Col_Length('Contents','Title') as columnLengthh"; 
     string connectionString = @"your con string"; 
     SqlConnection connection = null; 
     try 
     { 
      connection = new SqlConnection(connectionString); 

      using (SqlCommand command = new SqlCommand(queryString, connection)) 
      { 
       connection.Open(); 
       var result = command.ExecuteScalar(); 
       Console.WriteLine("columnLengthh = {0}", result); 
      } 
     } 
     catch (Exception ex) 
     { 
      ex.ToString(); 
     } 
     finally 
     { 
      connection.Close(); 
     } 
+0

谢谢。 ) –

+0

没有问题,祝你好运,随时提问 – SCramphorn

1

只需使用SqlConnection,SqlCommand,SqlReader等类与SQL Server进行通信。

string queryString = "select Col_Length('Contents','Title') as columnLengthh"; 
string connectionString = "Your connection string"; 
SqlConnection connection = null; 
try 
{ 
    connection = new SqlConnection(connectionString) 
    using (SqlCommand command = new SqlCommand(queryString, connection)) ; 
    { 
     connection.Open(); 
     var result = command.ExecuteScalar(); 
     Console.WriteLine("columnLengthh = {0}", result); 
    } 
} 
finally 
{ 
    connection.Close(); 
} 
+0

这也应该处置命令对象。此外,读者不使用。 – stuartd

+0

@stuartd谢谢。我纠正了它。对于读者而言,它并不使用读者对象。 –

+0

您仍然留在对ExecuteReader的调用中,这意味着对ExecuteScalar的调用将不起作用! – stuartd