标签: sqldatareader

SQLDataReader.Close 不会立即关闭

我正在使用 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)

sqldatareader

1
推荐指数
1
解决办法
1125
查看次数

在 Datareader 中处理 NULL

这是我用来通过 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)

c# sql datareader sqldatareader

1
推荐指数
1
解决办法
6172
查看次数

如何检查datareader是否为null?

我有一个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

c# asp.net dbnull datareader sqldatareader

0
推荐指数
1
解决办法
3809
查看次数

如何检查sqldatareader是否返回任何值

这是我想出的代码::

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,应该怎么做?

c# null sqldatareader

0
推荐指数
2
解决办法
2万
查看次数

C#SqlDataReader关闭方法

以下哪种方法更适合关闭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# dao sqlcommand sqldatareader

0
推荐指数
1
解决办法
544
查看次数

如何使用SqlDataReader从数据库中检索信息,c#

我很想和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)

c# sql sqldatareader

0
推荐指数
1
解决办法
4482
查看次数

来自C#/ ASP.NET的缓慢,大型SQL查询

可能重复:
如何在c#中有效地从SQL datareader写入文件?

我目前正在尝试创建一个使用只读访问权限的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)

一定有更好的方法.我环顾四周,看到了很多建议,基本上建议你做上面的事情来创建一个文件.这适用于较小的表,但不是我们每天使用的两个非常大的表.任何人都可以给我一个正确的方向吗?

c# sql sqldatareader

0
推荐指数
1
解决办法
539
查看次数

使用SqlDataReader获取"语法不正确"-error

我收到错误,我不知道代码有什么问题,所以如果有人能帮助我,我将不胜感激.

错误:

','附近的语法不正确.

突出显示的行是

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)

c# sqldatareader syntax-error

0
推荐指数
1
解决办法
2951
查看次数

如何在c#中使用带有参数化查询的SqlDataReader?

我正在查看参数化查询问题,我找不到使用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)

c# sql-server sqldatareader parameterized-query

0
推荐指数
1
解决办法
3872
查看次数

c# SqlDataReader throwing syntax error, but the command runs fine in SQL Server?

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)

c# sql-server sqldatareader syntax-error executereader

0
推荐指数
1
解决办法
50
查看次数