0

我知道我以前问过类似的问题,但我仍然无法让它工作。

我在 VS2010 中使用 C#

我正在做的是创建一个应用程序,该应用程序在textbox1单击按钮时接受用户输入的单词,并且"*"在它们前面的所有单词都打印在textbox2

我正在使用 SQL Server 数据库来执行此操作,因为我希望将"*"单词存储在数据库中,以便稍后添加一个计数器来显示该单词已输入了多少次。

例如:

  • 用户进入the cat is *browntextbox1按下按钮,然后*brown出现在textbox2

我的 SQL Server 代码是这样的:

SqlConnection con = new SqlConnection(@"Server=.\SQLEXPRESS;Database=StoreList;Integrated Security=sspi");

con.Open();
String queryStr = "SELECT item FROM StoreList WHERE item LIKE '*%'";
SqlCommand com = new SqlCommand(queryStr, con);
SqlDataReader sdr = com.ExecuteReader();

while (sdr.Read())
{
   this.textbox2.Text = sdr.GetValue(0).ToString();
}

sdr.Close();

我需要帮助的是如何进一步开发该代码以使应用程序正常工作。所以我不知道如何让它从 textbox1 中获取单词。

有帮助吗?

4

2 回答 2

2

忽略您的代码示例,在我看来,这里发生了几件事。

  1. 你想建立一个输入到 textbox1 中的加星词列表
  2. 您想将加星标的单词列表输出到 textbox2
  3. 存储加注字的频率列表

第 1 点和第 2 点可以在不与数据库交互的情况下完成。也许使用正则表达式来匹配带有 * 的单词。

第 3 点应该是执行 sql 语句的情况,该语句要么插入计数为 1 的新单词,要么将已知单词的计数更新 1。

编辑以下评论

第 1 点 - 建立一个单词列表

var matches = new System.Text.RegularExpressions.Regex("\\*[^ \t]+").Matches(textbox1);

foreach (Match match in matches)
    Console.WriteLine(match.Value);

第 3 点 - 存储频率列表的单词

//using statement to ensure connection is cleaned up correctly
using (SqlConnection connection = new SqlConnection(@"Server=.\SQLEXPRESS;Database=StoreList;Integrated Security=sspi"))
{
    connection.Open();

    foreach (Match match in matches)
    {
        var command = new SqlCommand("UpdateWordFrequency", connection);

        command.CommandType = System.Data.CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@word", match.Value));

        command.ExecuteNonQuery();
    }
}

程序看起来像这样

create procedure UpdateWordFrequency
    @word varchar(50)
as
if not exists (select 1 from WordList where word = @word)
    insert into WordList (word, frequency) values (@word, 0)

update WordList set frequency = frequency + 1 where word = @word

WordList 表有 2 个字段word (varchar) 和frequency (int)

第 2 点 - 输出加星标的单词

好吧,现在应该是从 WordList 表中选择的情况

于 2012-04-20T10:21:24.027 回答
1

为此使用存储过程可能会更好。

通过使用存储过程,您可以执行以下操作:

create procedure Insert_StoreList
@Word nvarchar(50)
AS

insert StoreList (
item )
values (
@Word )

SELECT item FROM StoreList WHERE item LIKE '*%'

然后您可以在 C# 中使用以下内容

SqlCommand com = new SqlCommand("Insert_StoreList", con);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.Add(new SqlParameter("@Word", Textbox1.Text));
SqlDataReader sdr = com.ExecuteReader();

编辑 - 如果您不喜欢使用存储过程,您也可以使用 2 行 SQL 来执行此操作,第一个是 ExecuteNonQuery 将值放入表中,第二个是从桌子。

第一个 sql 将是:

String queryStr = "insert StoreList (item) values (" + Textbox1.Text + ")"; 

第二个 sql 将是:

String queryStr = "SELECT item FROM StoreList WHERE item LIKE '*%'";
于 2012-04-20T10:14:56.280 回答