我正在使用 SQLDataReader 从表中读取有限数量的行,以便我可以将它们分页到网格视图中。一旦我读完我想要的行数,我想退出;但是 Reader.Close(或 Reader.Dispose)不会立即返回。
我这样做是为了展示各种读取数据方式的比较,所以我并不是在寻找替代解决方案。我只想在获得所需的行数时退出代码。
这是代码:
SqlDataReader Reader = null;
SqlConnection Connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ZipData"].ConnectionString);
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ZipCode", System.Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("City", System.Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("State", System.Type.GetType("System.String")));
try
{
string Query = string.Format("{0} WHERE ZipCode Like @ZipCode AND City Like @City AND State Like @State ORDER BY {1}", SQLQuery, (string.IsNullOrEmpty(sortType)) ? "ZipCode" : sortType);
SqlCommand Command = new SqlCommand(Query, Connection);
Command.Parameters.Add(new SqlParameter("@ZipCode", filter.Zip + "%"));
Command.Parameters.Add(new SqlParameter("@City", filter.City + "%"));
Command.Parameters.Add(new SqlParameter("@State", filter.State + "%"));
Connection.Open();
Reader …Run Code Online (Sandbox Code Playgroud) 这是我用来通过 DataReader 从 sql 读取数据的代码。当表中存在 NULL 时,它会给出错误。怎么处理呢?
我试过
c.ActualWeight= dr[0] as float? ?? default(float);
Run Code Online (Sandbox Code Playgroud)
这样做的问题是,它成功处理 NULL,但结果始终为 0,即使 sql 数据库在该字段中具有值 1。
{
List<Inventory_Connector> LC = new List<Inventory_Connector>();
string ConString = "data source=DELL\\SQLSERVER1;Initial Catalog=Camo;Integrated Security=True";
SqlConnection con = new SqlConnection(ConString);
SqlCommand cmd = new SqlCommand("Select Top 17 * from Inventory_Connector", con);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
c.ActualWeight = float.Parse(dr[0].ToString().Trim());
}
LC.Add(c);
}
dr.Close();
con.Close();
return LC;
Run Code Online (Sandbox Code Playgroud) 我有一个aspx页面,允许用户将修改后的条目提交到数据库中,但是当用户单击Submit以触发存储过程时,我想首先运行检查以查看是否存在具有相同关系的已修改行.
我传递以下查询的结果:
SELECT SwitchRoom.ModifiedID FROM SwitchRoom WHERE
SwitchRoomID = @ChkSwitchRmID", constring;
Run Code Online (Sandbox Code Playgroud)
进入a DataReader以确定该关系是否存在.
我需要它来确定阅读器是否返回NULL以允许执行该过程,如果没有,则不允许用户保存信息.
我尝试过以下方法:
if (dbreader = NULL)
{
Fire Procedure
}
else
{
"Error Message"
}
Run Code Online (Sandbox Code Playgroud)
而且我甚至试图将读者传递给一个datatable并且运行它而没有任何运气.
如何检查DataReader的结果null?
这是我想出的代码::
reader = cmd.ExecuteReader();
reader.Read();
if (reader.Read())
intQ = int.Parse(reader[0].ToString());
else
intQ = 0;
txtblck.Text = intQ.ToString();
reader.Close();
Run Code Online (Sandbox Code Playgroud)
但这导致它总是执行else,如果我这样做:
reader = cmd.ExecuteReader();
if (reader.Read())
intQ = int.Parse(reader[0].ToString());
else
intQ = 0;
txtblck.Text = intQ.ToString();
reader.Close();
Run Code Online (Sandbox Code Playgroud)
如果总是返回true,应该怎么做?
以下哪种方法更适合关闭SqlDataReader:
SqlDataReader reader = comm.ExecuteReader();
while (reader.Read())
{
}
reader.Close();
reader.Dispose();
Run Code Online (Sandbox Code Playgroud)
要么
SqlDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read())
{
}
Run Code Online (Sandbox Code Playgroud)
或者还有另一种关闭方法?
我很想和c#和SQL一起工作,所以我和我一起工作.
我需要访问我的SQL数据库中的变量,以及已经正确实现的用户名.我使用以下语句查询数据库:
private const string _getUserByUsernameQuery = @"
SELECT
[User].[username]
FROM
[User] WITH (NOLOCK)
INNER JOIN [Company] WITH (NOLOCK)
ON [User].[companyId] = [Company].[id]
WHERE
[User].[username] = @username
AND [User].[password] = @password";
Run Code Online (Sandbox Code Playgroud)
然后连接到数据库并访问用户名:
using (SqlConnection connection = new SqlConnection(SQLConfiguration.ConnectionString))
{
SqlCommand command = new SqlCommand(_getUserByUsernameQuery, connection);
command.Parameters.AddWithValue("@username", username);
command.Parameters.AddWithValue("@password", password);
try
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
Username = Convert.ToString(reader["username"]);
//CompanyId = Convert.ToString(reader["companyId"]);
lblUsername = Username;
//lblCompanyId = CompanyId;
Debug.WriteLine("Testing2::");
Debug.WriteLine(lblUsername);
//Debug.WriteLine(lblCompanyId);
}
}
}
catch …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试创建一个使用只读访问权限的Web应用程序,以允许用户从我们的数据库下载大文件.有问题的表中有400,000条记录,导出时会生成50 MB的.csv文件.
在SQL服务器上运行语句"SELECT*FROM [table]"需要大约7秒,而从我的Web应用程序(托管在不同服务器上)执行此操作大约需要33秒.这是将所有数据读入System.Data.SqlClient.SqlDataReader对象.
我的问题是我无法将我的SqlDataReader转换为.csv文件.将SqlDataReader的每一行转换为字符串并逐行将该字符串输出到文件大约需要2个小时,这是不可接受的.下面是我用来在Web应用程序的服务器上创建文件的代码:
while (rdr.Read())
{
string lineout = "";
for (int index = 0; index < rdr.FieldCount; index++)
lineout += rdr[index].ToString().Replace(',', ' ') + ',';
write(lineout, filename); //uses StreamWriter.WriteLine()
}
Run Code Online (Sandbox Code Playgroud)
一定有更好的方法.我环顾四周,看到了很多建议,基本上建议你做上面的事情来创建一个文件.这适用于较小的表,但不是我们每天使用的两个非常大的表.任何人都可以给我一个正确的方向吗?
我收到错误,我不知道代码有什么问题,所以如果有人能帮助我,我将不胜感激.
错误:
','附近的语法不正确.
突出显示的行是
rdr = cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)
码:
cn.Open();
string query = "SELECT * FROM dbo.ispiti WHERE poID=@poID, sgID=@sgID, npID=@npID";
SqlCommand cmd = new SqlCommand(query, cn);
cmd.Parameters.AddWithValue("@poID", pr);
cmd.Parameters.AddWithValue("@sgID", pr1);
cmd.Parameters.AddWithValue("@npID", pr2);
SqlDataReader rdr;
try
{
rdr = cmd.ExecuteReader();
if (rdr.Read())
{
MessageBox.Show("Well done!");
}
}
catch(exception ex)
{
MessageBox.Show("Error!");
}
finally
{
cn.Close();
}
Run Code Online (Sandbox Code Playgroud) 我正在查看参数化查询问题,我找不到使用SqlDataReader参数化查询来填充下拉列表的示例.
现在,我可以在这里使用我的代码填充我的下拉
if (!this.IsPostBack)
{
using (SqlConnection con = new SqlConnection(SQLConnectionString))
{
System.Data.SqlClient.SqlCommand go = new System.Data.SqlClient.SqlCommand();
con.Open();
go.Connection = con;
go.CommandText = "SELECT InsuredID, FirstName, LastName FROM [Lab2].[dbo].[INSURED]";
go.ExecuteNonQuery();
SqlDataReader readIn = go.ExecuteReader();
while (readIn.Read())
{
ddlHomeInsuredID.Items.Add(
new ListItem(readIn["InsuredID"].ToString() + " : " + readIn["FirstName"].ToString()
+ " " + readIn["LastName"].ToString()));
}
con.Close();
ddlHomeInsuredID.Items.Insert(0, new ListItem("--Select InsuredID--", "0"));
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我想让这个select语句参数化.我怎样才能做到这一点?我很乐意编写参数化的插入语句,如下所示:
using (SqlConnection connection = new SqlConnection(SQLConnectionString))
{
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandType = …Run Code Online (Sandbox Code Playgroud) I'm getting a syntax error from my SQL command shown in the code below. The error is happening on the ExecuteReader line, saying
Incorrect syntax near the keyword 'JOIN'.'
I have no idea why it's throwing a syntax error, the command works perfectly fine in SQL Server. Here's the code:
private void button1_Click(object sender, EventArgs e)
{
SqlCommand sqlcomViewSmashRoster;
SqlDataReader dataReader;
String strSql, strOutput ="";
strSql = "SELECT Roster.CharacterName, Roster.TotalTournamentsParticiaped, Roster.TotalWins, Roster.TotalLosses, Roster.Championships, Roster.InjuriesCaused, Roster.Injured" +
"FROM Roster" +
"INNER …Run Code Online (Sandbox Code Playgroud) sqldatareader ×10
c# ×9
sql ×3
datareader ×2
sql-server ×2
syntax-error ×2
asp.net ×1
dao ×1
dbnull ×1
null ×1
sqlcommand ×1