【问题标题】:SqlDataReader filling column in datagridviewdatagridview中的SqlDataReader填充列
【发布时间】:2013-07-18 08:42:24
【问题描述】:

我一直想知道如何设置我的 SqlDataReader 来填充我的 datagridview “dtg_ksluzby”中的列“pocet”。我认为我的代码应该是这样的:

 SqlCommand novyprikaz2 = new SqlCommand("SELECT pocet FROM klisluz WHERE id='"+vyberradek+"'",spojeni); // I also have column "pocet" in table klisluz, vyberradek is string which selectrs id number
            spojeni.Open();
            SqlDataReader precti2 = novyprikaz2.ExecuteReader();
            if (precti2.Read())
            {
                dtg_ksluzby.Columns["pocet"]; // this part I need to improve to fill
            }

您能帮我改进我的代码吗? 提前非常感谢。

为trippino编辑:

  1. 在包含列的表中的“klisluz”中 (id、akce、子键、文本、pocet)。我需要:
    1. select * from klisluz where subkey = '"+vyberradek+"'
    2. 取出列 pocet 并将其填充到 dtg_ksluzby 中,我发现 dtg_ksluzby 中的“文本”列中的文本相似

我希望我的描述是可以理解的,对不起我的英语不好。

【问题讨论】:

  • 你要更新现有数据网格视图的列并绑定数据吗?

标签: c# sql sql-server sqldatareader


【解决方案1】:

不要使用字符串连接构建sql命令,(避免Sql Injection和解析问题)

using(SqlConnection spojeni = new SqlConnection(conString))
using(SqlCommand novyprikaz2 = new SqlCommand("SELECT pocet FROM klisluz " + 
                                              "WHERE id = @id",spojeni); 
{
     novyprikaz2.Parameters.AddWithValue("@id", vyberradek);
     spojeni.Open();
     using(SqlDataAdapter da = new SqlDataAdapter(novyprikaz2))
     {
        DataTable dt = new DataTable();
        da.Fill(dt);
        dtg_ksluzby.DataSource = dt;

     }
 }

使用 DataAdapter 从数据库加载数据并将此 DataAdapter 实例传递给 DataGridView 的 DataSource

【讨论】:

    【解决方案2】:

    使用这样的东西:

            for (int i = 0; i < dtg_ksluzby.Rows.Count; i++)
            {
                var row = dtg_ksluzby.Rows[i];
                using(var novyprikaz2 = new SqlCommand("SELECT pocet FROM klisluz WHERE text LIKE @t AND subkey=@s", spojeni))
                {
                    novyprikaz2.Parameters.AddWithValue("@t", row.Cells["text"].Value.ToString());
                    novyprikaz2.Parameters.AddWithValue("@s", vyberradek);
                    spojeni.Open();
                    SqlDataReader precti2 = novyprikaz2.ExecuteReader();
                    if (precti2.Read())
                    {
                        row.Cells["pocet"].Value = precti2["pocet"];
                    }
                }
            }
    

    【讨论】:

    • 好吧,我不想添加行,而是填充现有列,这可能吗?非常感谢您的回答。
    • 我已经编辑了我的答案,但我不明白你有多少行进入数据库进入gridView
    • 您的第二个代码工作正常,但是当我填充多行时,它只填充顶部的值。我想我错误地描述了我的问题。我用 5 行加载 dtg_ksluzby。我想用“pocet”中的值填充每一行。请问我应该改什么?
    • 您是否有一个进入数据库的密钥,以便了解哪个是数据网格视图中的相关行?
    • 在“klisluz”中,这是包含列(id、akce、子键、文本、pocet)的表,我需要在“text”所在的位置插入“pocet”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    相关资源
    最近更新 更多