C# 读卡器没有读取数据

C# 读卡器没有读取数据,c#,sql,winforms,C#,Sql,Winforms,我有一个这样的函数 try { using(var sConnection = new SqlConnection(ConnectionString)) using(var sCommand = sConnection.CreateCommand()) { sCommand.CommandText = @"SELECT TAB

我有一个这样的函数

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 sConnection=newsqlconnection(ConnectionString))
使用(var sCommand=sConnection.CreateCommand())
{
sCommand.CommandText=@“选择
表名称
像
桌子
从…起
信息\u SCHEMA.TABLE\u约束
哪里
约束类型='主键'
和
表\u名称“dtProperties”
订购人
表“名称”;
sConnection.Open();
使用(var reader=sCommand.ExecuteReader())//麻烦行
{                    
while(reader.Read())
{
sb.AppendLine(reader.GetString(0));
}
}
}
}
捕获(例外情况除外)
{
//所有异常都被处理并写入事件日志。
事件日志=新事件日志(“应用程序”);
log.Source=“MFDBAnalyser”;
log.WriteEntry(例如Message);
}
使某人返回字符串();
}
在调试时,它会给出结果,直到连接打开,但是var读取器没有读取数据

谁能指出错误在哪里

见MSDN:

因此,可以尝试使用
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());
    }
}

在创建sCommand之前,请尝试放置scoconnection.Open()

提供的代码与运行的代码相同吗

如果您具有自初始化get属性,则通常会发生在调试中而不是在运行时“工作”的奇怪行为。大概是这样的:

private string _name;

public string Name
{
  get {
    if (_name == null)
    {
      name = string.Empty;
    }
    return _name;
  }
  set {_name = value;}
}

所以,如果您直接使用_name,并且调试器显示了这样一个属性,那么它会在使用之前“意外”初始化您的属性。

您的意思是它执行时没有异常,但不提供任何数据吗?SQL事件探查器显示了什么?你能给出异常获取的详细信息吗?有人能告诉我为什么会发生这种情况吗?你有“var reader”而不是“SQLDataReader”的原因吗?我也看到了改变这种情况……这对我来说不太管用!1@Srivastava啊,对不起。。。好吧,那么,我想问几个问题(有些可能听起来很愚蠢):1。代码运行时是否存在异常?2.在SQL客户机中执行查询时是否会得到行?3.如果你一步一步地调试,你是否会在Reader.read()中循环多次,这意味着读到了什么?@Srivastava好的,那么你的答案是1。不,2。是的,还有3个。不,它会立即从循环中退出?@Srivastava编辑了我的帖子,尝试使用这段代码,这是我需要时使用的代码,而不是你的代码,看看它是否有效以及读者会说什么。Hasrows说。@Srivastava告诉我我写的代码是否有任何问题;)
reader.hasRows == true !
Categorie
Chantier
...
And all my table names.
private string _name;

public string Name
{
  get {
    if (_name == null)
    {
      name = string.Empty;
    }
    return _name;
  }
  set {_name = value;}
}