【问题标题】:getting index after compare or search比较或搜索后获取索引
【发布时间】:2016-11-23 06:53:51
【问题描述】:

我想问如何获取索引

public void cari()
        {
            SqlDataAdapter adapter = new SqlDataAdapter(command.CommandText, myConnection);
            try
            {
                ds.Tables.Clear();

                command.Connection = myConnection;
                command.CommandText = "select * from General.genre WHERE genre Like  '%"+textEdit1.Text.ToString()+"%' or code like '%"+textEdit1.Text+"%'";
                myConnection.Open();
                //  adapter.Fill(dt);

                var  buka = command.ExecuteReader();


                if (buka.Read())
                {

                    var x1 = buka[1].ToString();
                    textEdit2.Text = x1;
                    MessageBox.Show("asdas" + textEdit2.Text + ";");


                }
                else
                {
                    MessageBox.Show("type genre");
                }

上面的代码只显示了字符串,但是我想知道如何获取索引。也许在if (buka.read())之后的代码?

【问题讨论】:

  • 你说的是哪个索引?给定列名的索引?
  • 我忘记上传图片,如果我输入dance,它会在什么索引中显示'dance'
  • 我尝试使用下面的答案只显示 1
  • 索引是多少?
  • 你的意思是SQL表里面的行的索引吗?

标签: c# gridview indexing


【解决方案1】:

我强烈建议您不要将 UI 输入中的字符串连接到 SQL 查询中。这很容易受到 SQL 注入的影响。而是使用 SQL 参数。

解决方案:

将此 SQL 查询用作您的命令文本:

string query = "SELECT * FROM " +
                "(SELECT *, ROW_NUMBER()  OVER(ORDER BY(SELECT NULL)) [index] " +
                "FROM General.genre) R " +
                "WHERE [genre] LIKE '%" + textEdit1.Text.ToString() + "%' " +
                "OR [code] LIKE '%" + textEdit1.Text.ToString() + "%' ";
command.CommandText = query;

然后在你的阅读中使用:

var x1 = buka[1].ToString();
textEdit2.Text = x1;
var index = int.Parse(buka["index"]);
MessageBox.Show("asdas" + textEdit2.Text + "; Index = " + index );

【讨论】:

  • hhm 感谢您的回复。确定它有效,但 iam knda 使用该查询。你知道怎么显示吗?
  • @DavidChopperField 您必须更改查询,否则您将无法获得表中的原始索引。
  • 好的,想确定为什么索引的开头是1而不是0?
  • 您可以在代码中添加 - 1 或进行查询。随心所欲。如果你想要一个从零开始的结果。
  • R 在 "FROM General.genre) R 中代表什么?
【解决方案2】:

以下代码行应该为您提供与列名对应的索引。

int index = buka.GetOrdinal("ColumnName");

如果您使用索引来访问阅读器的字段,则无论如何您都有所需的数字。

【讨论】:

  • 但它只读取列的索引,我需要行吗?就像芭蕾舞一样。谢谢回复
  • 对不起,不明白你想要行号。但是由于这个索引随着每个查询而变化,取决于 where 语句和 order by 语句,我猜你只能使用一个计数器,你可以使用每个 buka.Read();
  • 是这样的吗?整数计数器 = 0; MessageBox.Show("asdas" + textEdit2.Text + "; 索引 " + counter++);计数器保持显示为 0
  • 是的,基本上就是这样。但是由于您只读取了 DataReader 的第一条记录(或者我是否错过了循环构造?)它将始终为 0!你到底想完成什么?类似于表中的相对记录号,还是您需要“到达顺序”?
  • 我认为它是每个索引行的相对记录。我认为它已经解决了上面的答案感谢您的回复
猜你喜欢
  • 1970-01-01
  • 2010-09-22
  • 2014-09-26
  • 1970-01-01
  • 2022-10-25
  • 1970-01-01
  • 2020-04-05
  • 2021-07-30
  • 1970-01-01
相关资源
最近更新 更多