0

我正在制作一个押韵词典,并且我有一个包含 3 个列的数据库表,用户将搜索数据库,搜索关键字将搜索单词结尾与文本框中的单词匹配的数据库。

当我在文本框中输入一些关键字时

我收到错误:关键字“LIKE”附近的语法不正确。

这就是我的数据库的样子

这是我的 aspx 的样子:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">

    <title>Kafiye Dizini - Türkçe Kafiye Bulma Sözlüğü - Uyak Bulucu Sözlük - İstediğiniz harf ile biten kelimeleri bulan sözlük</title>
    <meta name="description" content="İstediğiniz harfler ile biten kelimeleri bulmanızı sağlayan sözlük" />
    <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
    <link href="style.css" rel="stylesheet" />

</head>
<body>
    <form id="form1" runat="server">
    <div>



                <div class="top">
                    <div class="email">İletişim: fahrettinveysel@gmail.com</div>
                </div>

                <div class="leftcontainer">
                </div>

                <div class="middlecontainer">
                    <div class="title">Kafiye Dizini</div>
                    <div class="subtitle">İstediğiniz harf veya hece ile biten kelimeleri bulmanızı sağlayan sözlük</div>
                    <div class="searchcontainer">
                        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
                    </div>

                    <div class="resultboxcontainer">
                        <div id="resultbox1" runat="server"></div>
                        <div id="resultbox2" runat="server"></div>
                        <div id="resultbox3" runat="server"></div>
                    </div>

                    <div class="idefix"></div>
                </div>

                <div class="rightcontainer">
                    <div class="ornekarama">
                        <div class="ornekaramabaslik">Örnek Arama</div>
                        <input type="text" class="ornekaramatextbox" value="rop" disabled="disabled" />
                        <div class="ornekaramasonuclar">filantrop<br />gardırop<br />hipermetrop<br />mikrop<br />mizantrop</div>
                    </div>
                </div>


    </div>
    </form>
</body>
</html>

这是我的 aspx.cs

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    SqlConnection cnn = new SqlConnection("Initial Catalog=kafiyedizini;Data Source=localhost;Integrated Security=SSPI;");

    protected void Button1_Click(object sender, EventArgs e)
    {
        if (TextBox1.Text != "")
        {
            cnn.Open();
            SqlCommand cmd = new SqlCommand("SELECT kelime1,kelime2,kelime3 FROM kelimeler LIKE @arama", cnn);
            cmd.Parameters.AddWithValue("@arama", "%" + TextBox1.Text);
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    resultbox1.InnerHtml += dr.GetString(0);
                    resultbox2.InnerHtml += dr.GetString(1);
                    resultbox3.InnerHtml += dr.GetString(2);
                }
            }

            cnn.Close();
        }
        else
        {
            resultbox1.InnerHtml += "please enter data";
        }
    }
}
4

2 回答 2

0

您缺少 SQL 查询的 WHERE 部分

例子:

SELECT * FROM test WHERE test.Id LIKE '%asd%'

我还认为, dr.Read() 执行 PER ROW。

希望这可以帮助

于 2013-09-25T20:11:05.030 回答
0

您问题中的初始 sql 语句应如下所示

SELECT kelime1,kelime2,kelime3 FROM kelimeler where kelime1 LIKE @arama OR kelime2 LIKE @arama or kelime3 like @arama

您错过了要在 like 语句中使用的位置和字段。

要将每个结果放在单独的“盒子”中,您最好研究 GridView 或 DataRepeater 的工作原理。

在您的初始代码中最接近可行的方法,包括支持处理返回的字段之一的 null/emtpy 值,很好地填充了 3 个结果框:

        var f1 = dr.GetString(0);
        var f2 = dr.GetString(1);
        var f3 = dr.GetString(2);
        if (!String.IsNullOrEmpty(f1)) 
            resultbox1.InnerHtml += String.Format("<div>{0}</div>",f1);
        if (!String.IsNullOrEmpty(f2)) 
            resultbox2.InnerHtml += String.Format("<div>{0}</div>",f2);
        if (!String.IsNullOrEmpty(f3)) 
            resultbox1.InnerHtml += String.Format("<div>{0}</div>",f3);
于 2013-09-25T20:13:52.950 回答