我有一个这样的函数
try
{
using(var sConnection = new SqlConnection(ConnectionString))
using(var sCommand = sConnection.CreateCommand())
{
sCommand.CommandText = @"SELECT
TABLE_NAME
AS
TABLES
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
CONSTRAINT_TYPE = 'PRIMARY KEY'
AND
TABLE_NAME <> 'dtProperties'
ORDER BY
TABLE_NAME";
sConnection.Open();
using(var reader = sCommand.ExecuteReader()) // Troublesome line
{
while(reader.Read())
{
sb.AppendLine(reader.GetString(0));
}
}
}
}
catch(Exception ex)
{
//All the exceptions are handled and written in the EventLog.
EventLog log = new EventLog("Application");
log.Source = "MFDBAnalyser";
log.WriteEntry(ex.Message);
}
return sb.ToString();
}在调试时,它会给出结果,直到连接打开,但var Reader没有读取数据。
谁能指出错误在哪里!!
发布于 2010-12-29 19:30:18
您提供的代码与您运行的代码相同吗?
如果你有自初始化的get属性,在调试中“工作”而不是在运行时,通常会发生奇怪的行为。如下所示:
private string _name;
public string Name
{
get {
if (_name == null)
{
name = string.Empty;
}
return _name;
}
set {_name = value;}
}因此,如果你直接使用_name,而调试器显示这样的属性,它会在使用之前“意外地”初始化你的属性。
发布于 2010-12-10 20:10:34
在MSDN中可以看到:Reader
while (reader.Read())
{
Console.WriteLine(String.Format("{0}", reader[0]));
}所以也许可以尝试使用reader[0]而不是reader.getString(0)?
编辑:
试试这个:
public Form1()
{
InitializeComponent();
String ConnectionString = @"Data Source=SERVER\SQLEXPRESS;Initial Catalog=DBNAME;User ID=USER;Password=PWD";
StringBuilder sb = new StringBuilder();
using (SqlConnection sConnection = new SqlConnection(ConnectionString))
{
String query = @"SELECT TABLE_NAME AS TABLES FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME <> 'dtProperties' ORDER BY TABLE_NAME";
SqlCommand comand = new SqlCommand(query, sConnection);
sConnection.Open();
SqlDataReader reader = comand.ExecuteReader();
if (reader.HasRows)
{
Console.WriteLine("reader.hasRows == true !");
}
else
{
Console.WriteLine("reader.hasRows == FALSE !");
}
while (reader.Read())
{
sb.AppendLine(reader.GetString(0));
}
}
Console.WriteLine(sb.ToString());
}
}看看它能不能用。
我创建了一个新的Winform应用程序,试过了,它对我很有效。
下面是我的输出:
reader.hasRows == true !
Categorie
Chantier
...
And all my table names.发布于 2010-12-10 21:15:54
尝试在创建sCommand之前放置sConnection.Open()。
https://stackoverflow.com/questions/4408385
复制相似问题