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;}
}