查询远程 SQL 服务器上的 table 以格式化方式处理和显示?
Query a table on a remote SQL Server to process and display in formatted way?
我正在尝试在远程 SQL 服务器上查询 table 以处理数据,然后以格式化的方式显示数据。
当我尝试这个时,它一直抛出异常并说
Specified cast is not valid
我已将 class 我所在的 运行 包含在查询中。出于明显的原因,我已经删除了连接到我的服务器的真实细节。这是我的数据库的内容 contents of database。我不需要客户 ID,但我确实需要其余的列。
如有任何帮助,我们将不胜感激。
static class CustomerRepository
{
private static string connString = "Server=xxxx.com;"
+ "Database=xxxxxx;"
+ "User ID=xxxxxx;"
+ "Password=xxxxxx;"
+ "Integrated Security=False;";
public static CustomerCollection getAllCustomers()
{
CustomerCollection customers;
using (SqlConnection conn = new SqlConnection(connString))
{
string query = string.Format("{0} {1} {2}"
, "SELECT CompanyName, Address, City, Province, PostalCode, CreditHold"
, "FROM Customer"
, "ORDER BY CompanyName");
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = query;
cmd.Connection = conn;
conn.Open();
customers = new CustomerCollection();
using (SqlDataReader reader = cmd.ExecuteReader())
{
string companyName;
string address = null;
string city = null;
string province = null;
string postalCode = null;
bool creditHold = false;
while (reader.Read())
{
companyName = reader["CompanyName"] as string;
if (!reader.IsDBNull(1))
{
address = reader[1] as string;
}
if (!reader.IsDBNull(2))
{
city = reader[2] as string;
}
if (!reader.IsDBNull(3))
{
province = reader[3] as string;
}
if (!reader.IsDBNull(4))
{
postalCode = reader[4] as string;
}
if (!reader.IsDBNull(5))
{
creditHold = (bool)reader[5];
}
customers.Add(new CustomerInfo(companyName, address, city, province, postalCode, creditHold));
}
return customers;
}
}
}
}
}
用
替换你的creditHold = (bool)reader[5];
if (reader[5].ToString() == "1")
{
creditHold = true;
}
else
{
creditHold = false;
}
最可能的错误原因是将 Sql 类型 Tinyint
值无效转换为 .NET 类型 bool
列编号 5
中的值
首先从 SqlDataReader
检索具有相应 .NET 类型(Tinyint
到 byte
)
的数据
然后使用您的逻辑将 Byte
值转换为 bool
if (!reader.IsDBNull(5))
{
byte rawCreditHold = reader.GetByte(5);
creditHold = (rawCreditHold == 1);
}
试试这个:
while (reader.read())
{
if (reader["CompanyName"] != System.DBNull.Value) companyName = Convert.ToString(reader["CompanyName"]);
if (reader["Address "] != System.DBNull.Value) address = Convert.ToString(reader["Address"]);
if (reader["City"] != System.DBNull.Value) city = Convert.ToString(reader["City"]);
if (reader["PostalCode"] != System.DBNull.Value) postalCode = Convert.ToString(reader["PostalCode"]);
if (reader["Province"] != System.DBNull.Value) province = Convert.ToString(reader["Province"]);
if (reader["CreditHold"] != System.DBNull.Value) creditHold = Convert.ToBoolean(reader["CreditHold"]);
customers.Add(new CustomerInfo(companyName, address, city, province, postalCode, creditHold));
}
我正在尝试在远程 SQL 服务器上查询 table 以处理数据,然后以格式化的方式显示数据。
当我尝试这个时,它一直抛出异常并说
Specified cast is not valid
我已将 class 我所在的 运行 包含在查询中。出于明显的原因,我已经删除了连接到我的服务器的真实细节。这是我的数据库的内容 contents of database。我不需要客户 ID,但我确实需要其余的列。
如有任何帮助,我们将不胜感激。
static class CustomerRepository
{
private static string connString = "Server=xxxx.com;"
+ "Database=xxxxxx;"
+ "User ID=xxxxxx;"
+ "Password=xxxxxx;"
+ "Integrated Security=False;";
public static CustomerCollection getAllCustomers()
{
CustomerCollection customers;
using (SqlConnection conn = new SqlConnection(connString))
{
string query = string.Format("{0} {1} {2}"
, "SELECT CompanyName, Address, City, Province, PostalCode, CreditHold"
, "FROM Customer"
, "ORDER BY CompanyName");
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = query;
cmd.Connection = conn;
conn.Open();
customers = new CustomerCollection();
using (SqlDataReader reader = cmd.ExecuteReader())
{
string companyName;
string address = null;
string city = null;
string province = null;
string postalCode = null;
bool creditHold = false;
while (reader.Read())
{
companyName = reader["CompanyName"] as string;
if (!reader.IsDBNull(1))
{
address = reader[1] as string;
}
if (!reader.IsDBNull(2))
{
city = reader[2] as string;
}
if (!reader.IsDBNull(3))
{
province = reader[3] as string;
}
if (!reader.IsDBNull(4))
{
postalCode = reader[4] as string;
}
if (!reader.IsDBNull(5))
{
creditHold = (bool)reader[5];
}
customers.Add(new CustomerInfo(companyName, address, city, province, postalCode, creditHold));
}
return customers;
}
}
}
}
}
用
替换你的creditHold = (bool)reader[5];
if (reader[5].ToString() == "1")
{
creditHold = true;
}
else
{
creditHold = false;
}
最可能的错误原因是将 Sql 类型 Tinyint
值无效转换为 .NET 类型 bool
列编号 5
中的值
首先从 SqlDataReader
检索具有相应 .NET 类型(Tinyint
到 byte
)
的数据
然后使用您的逻辑将 Byte
值转换为 bool
if (!reader.IsDBNull(5))
{
byte rawCreditHold = reader.GetByte(5);
creditHold = (rawCreditHold == 1);
}
试试这个:
while (reader.read())
{
if (reader["CompanyName"] != System.DBNull.Value) companyName = Convert.ToString(reader["CompanyName"]);
if (reader["Address "] != System.DBNull.Value) address = Convert.ToString(reader["Address"]);
if (reader["City"] != System.DBNull.Value) city = Convert.ToString(reader["City"]);
if (reader["PostalCode"] != System.DBNull.Value) postalCode = Convert.ToString(reader["PostalCode"]);
if (reader["Province"] != System.DBNull.Value) province = Convert.ToString(reader["Province"]);
if (reader["CreditHold"] != System.DBNull.Value) creditHold = Convert.ToBoolean(reader["CreditHold"]);
customers.Add(new CustomerInfo(companyName, address, city, province, postalCode, creditHold));
}