我无法连接SQL并运行简单的选择查询,我需要将select * from ServerInfo where ServerID = 1991638835"
输出到控制台行或txt文件:
这是我的代码:
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Text;
namespace ConnectingToSQLC
{
class Program
{
static void Main(string[] args)
{
SqlConnection conn = new SqlConnection("server= XXXXX; database = ES1Archive; Integrated Security=false; User ID = sa; Password=XXXXXX");
conn.Open();
SqlCommand cmd = new SqlCommand("select * from ServerInfo where ServerID = 1991638835", conn);
SqlDataReader reader = cmd.ExecuteReader ();
while (reader.Read())
{
//Console.WriteLine ("{1}", "{0}", reader.GetString (0), reader.GetString (1));
Console.WriteLine(reader.GetString(3));
}
reader.Close();
conn.Close();
if (Debugger.IsAttached)
{
Console.ReadLine();
}
}
}
}
它工作正常。但如果我改变了
Console.WriteLine ("{1}", "{3}", reader.GetString (1), reader.GetString (3));
我总是有第2列。总共有7列,第3列是空的,而第4列是XML。
如何修改我的代码以转储所有内容?
答案 0 :(得分:3)
你有太多的格式化字符串 - 将它们合并为一个,例如:
Console.WriteLine ("{0} - {1}", reader.GetString(1), reader.GetString(3))
Console.WriteLine
overload you are using格式化字符串的索引类似于string.Format
- 它不依赖于您在阅读器中使用的 索引, format参数占位符只需匹配其他params args
参数的 order 。
此外:
SELECT *
是不好的做法,当按顺序索引访问数据读取器列时更是危险,因为表中的更改会破坏您的读者代码。建议您明确命名您正在使用的列和/或使用reader
Console.WriteLine
上的字符串输出,则不需要使用Get<Type>()
重载 - 您只需使用序数访问器(在您保证之后)具有显式列名SELECT
的列的顺序: - )e.g。对于读者第1,3和6列(当然是零):
Console.WriteLine ("{0} - {1} - {2}", reader[1], reader[3], reader[6]);
但更好的是:
Console.WriteLine ("{0} - {1} - {2}", reader["RealNameOfCol1"],
reader["RealNameOfCol3"], reader["RealNameOfCol6"]);
答案 1 :(得分:0)
您可以使用IDataRecord接口循环执行此操作:
class Program
{
static void Main(string[] args)
{
SqlConnection conn = new SqlConnection("server= XXXXX; database = ES1Archive; Integrated Security=false; User ID = sa; Password=XXXXXX");
conn.Open();
SqlCommand cmd = new SqlCommand("select * from ServerInfo where ServerID = 1991638835", conn);
SqlDataReader reader = cmd.ExecuteReader ();
while (reader.Read())
{
for(int i = 0; i<reader.FieldCount;i++)
{
Console.WriteLine(reader[i]);
}
}
reader.Close();
conn.Close();
if (Debugger.IsAttached)
{
Console.ReadLine();
}
}
}