这基本上是一种搜索工具。当我在组合框中输入一些东西时,组合框会下降并向我显示建议(类似Google搜索栏)
我创建了一个执行一些复杂计算的过程,它接受一个参数并返回一些行。然后我创建了一个组合框事件(On Update Text)。
在事件处理程序中我写了这段代码:
private void combobox_TextUpdate(object sender, EventArgs e)
{
this.combobox.Items.Clear();
DataTable List = new DataTable();
if (this.combobox.Text.Length > 0)
{
List = searchIt(combobox.text);
foreach (DataRow Row in List.Rows)
{
this.combobox.Items.Add(Row.ItemArray.GetValue(0).ToString());
}
this.combobox.DroppedDown = true;
}
}
static public DataTable searchIt(string STR)
{
string connectionString = McFarlaneIndustriesPOSnamespace.Properties.Settings.Default.McFarlane_IndustriesConnectionString;
SqlConnection con = new SqlConnection(connectionString);
DataTable DT = new DataTable();
con.Open();
SqlDataAdapter DA = new SqlDataAdapter("USE [McFarlane Industries] " +
"EXEC search " +
STR, connectionString);
DA.Fill(DT);
con.Close();
return DT;
}
函数searchIt
执行存储过程并返回DataTable
。存储过程在SQL Server Management Studio中正常运行。
但是在应用程序中,它在某些情况下无法正常工作。
当我输入 [space] 时,它会抛出一个异常,它表示存储过程需要未提供的参数。
当我输入它们时还有许多其他字符,它会抛出字符串“my string”末尾的无效字符异常。
任何建议如何实现我的目标。
答案 0 :(得分:2)
使用sqlcommand调用存储过程以填充数据表
using (SqlConnection scn = new SqlConnection(connect)
{
SqlCommand spcmd = new SqlCommand("search", scn);
spcmd.Parameters.Add("@blah", SqlDbType.VarChar, -1); //or SqlDbType.NVarChar
spcmd.CommandType = System.Data.CommandType.StoredProcedure;
using (SqlDataAdapter da = new SqlDataAdapter(spcmd))
{
da.Fill(dt);
}
}
答案 1 :(得分:1)
static public DataTable searchIt(string STR)
{
string connectionString = McFarlaneIndustriesPOSnamespace.Properties.Settings.Default.McFarlane_IndustriesConnectionString;
SqlConnection con = new SqlConnection(connectionString);
DataTable DT = new DataTable();
con.Open();
SqlCommand command = new SqlCommand("Name_of_Your_Stored_Procedure",con);
command.CommandType=CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@parameter_name",SqlDbType.NVarChar));
command.Parameters[0].Value="Your Value in this case STR";
SqlDataAdapter DA = new SqlDataAdapter(command);
DA.Fill(DT);
con.Close();
return DT;
}
重要: 'parameter_Name'和'Name_of_Your_Stored_Procedure'应替换为您在数据库中拥有的。参数值可以像“abc”(combox.Text)
命令及其类型,其文本是必要的。 添加参数取决于您的存储过程。它们可以是0或更多但是一旦添加它们必须给出它们的值。 conn(连接)可以传递给新的SqlCmmand()或新的SqlDataAdapter()
不需要像'use'和'exec'这样的东西
关注我,此链接将来可能对存储过程有帮助 http://www.codeproject.com/Articles/15403/Calling-Stored-procedures-in-ADO-NET
两个可选建议
使用变量名'list'而不是'List'(您使用过),但是在使用System.Collections.Generic添加命名空间之前,您不会遇到此名称的问题。但您将来可能需要使用此命名空间。
仅使用list.Rows [0] .ToString();在处理字符串中的数据时,无需获取itemarray然后获取值;