今天在使用 AutoCompleteExtender 自动完成控件时发现一个问题,也许这是微软的一个 bug 吧。如果返回的数组是纯数字,那么将变成 undefined或 null。public string[] GetUsers(string prefixText, int count) //兩個參數分別是輸入文本跟提示項數
{
string[] items = new string[count];
SqlConnection myCon = new SqlConnection("Data Source=**;Initial Catalog=**;User ID=**;Password=**"); //數據庫連接
myCon.Open(); //打開數據庫連接 select * from authors
SqlCommand myCmd = new SqlCommand("select top " + count + " * from authors where ziplike '" + prefixText + "%'", myCon);
SqlDataReader myDR = myCmd.ExecuteReader();
string auid;
int i = 0;
while (myDR.Read())
{
auid = myDR["zip"].ToString().Trim();
items[i++]=(auid);
}
myCon.Close(); //關閉數據庫連接
return items;
}
由於查到的郵編(ZIP)是純數字就出現了undefined的現象
我不清楚为什么数字字符串会变成 undefined 和 null,那又要如何解決這一問題
跪求高手們不吝賜教,100分相送
{
string[] items = new string[count];
SqlConnection myCon = new SqlConnection("Data Source=**;Initial Catalog=**;User ID=**;Password=**"); //數據庫連接
myCon.Open(); //打開數據庫連接 select * from authors
SqlCommand myCmd = new SqlCommand("select top " + count + " * from authors where ziplike '" + prefixText + "%'", myCon);
SqlDataReader myDR = myCmd.ExecuteReader();
string auid;
int i = 0;
while (myDR.Read())
{
auid = myDR["zip"].ToString().Trim();
items[i++]=(auid);
}
myCon.Close(); //關閉數據庫連接
return items;
}
由於查到的郵編(ZIP)是純數字就出現了undefined的現象
我不清楚为什么数字字符串会变成 undefined 和 null,那又要如何解決這一問題
跪求高手們不吝賜教,100分相送
return items; 返回的这个里面是纯数字数组就会出现楼住说的情况吗?
此句不对应为:
SqlCommand myCmd = new SqlCommand("select top " + count + " * from authors where zip like '" + prefixText + "% '", myCon);
zip与like 间应空格
123455
123458
123uie
1iwi58
那麼當我在與AutoCompleteExtender綁定的TxexBox中輸入"1"(不含引號)時彈出的自動完成下拉列表的數据就成了下面這樣的四個:
undefined
undefined
123uie
1iwi58
而沒有出現我想要的結果
123455
123458
123uie
1iwi58
undefined
undefined
123uie
1iwi58
null
因為數據表中只有四條符合以1開頭的要求,而count強制要求5個所以就有null的現象
select top 5 * from authors where zip like '1%'如果也如你上面所说,就要检查你zip具体内容了.如果正确,就检查你取数据的语法.
我改成這樣也不行,問題依然如故
SqlCommand myCmd = new SqlCommand("select top " + count + " * from authors where ziplike '" + prefixText + "% '", myCon);
此句不对应为:
SqlCommand myCmd = new SqlCommand("select top " + count + " * from authors where zip like '" + prefixText + "% '", myCon);
zip与like 间应空格==========================================
SqlCommand myCmd = new SqlCommand("select top " + count + " * from authors where zip like '%" + prefixText + "% '", myCon);
2、我没用过AutoCompleteExtender,是不是有些格式化的内容。
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections.Generic; //System.Collections.Generic是List的命名空間
using System.Data.SqlClient;
using System.Web.Script.Services;[WebService(Namespace = "AjaxControlToolkit")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService] //用於調用web service標簽
public class WebService : System.Web.Services.WebService
{
public WebService() { }
[WebMethod]
public string[] GetUsers(string prefixText, int count) //兩個參數分別是輸入文本跟提示項數
{
List<string> items = new List<string>(count);
SqlConnection myCon = new SqlConnection("Data Source=**;Initial Catalog=**;User ID=**;Password=**");//數據庫連接
myCon.Open(); //打開數據庫連接
SqlCommand myCmd = new SqlCommand("select top " + count + " convert(varchar(10),zip) as zip from test where convert(varchar(10),zip) like '" + prefixText + "%'", myCon);
//SqlCommand myCmd = new SqlCommand("select top " + count + " * from test where zip like '9%'", myCon);
SqlDataReader myDR = myCmd.ExecuteReader();
string auid;
while (myDR.Read())
{
auid = myDR["zip"].ToString().Trim();
items.Add(auid);
}
myCon.Close(); //關閉數據庫連接
return items.ToArray();
}}
这句话改为
List <string > items = new List <string >();
改為:
auid = myDR["zip"].ToString().Trim()+"-"; //或其它字符(空格不行)
則正常,只是每一個后面都帶個尾巴,
123455-
123458-
123uie-
1iwi58-
while (myDR.Read())
{
auid = myDR["zip"].ToString().Trim();
items[i++]=(auid);
}
改成 items[i++] = " "+auid;
试试
煩哪,看到www.google.cn里面輸入時就會發現它即使輸入的為純數字也不會發生這種問題
楼主,你的代码看不出有什么问题,测试也没问题.问题应该出在环境上.
[WebService(Namespace = "AjaxControlToolkit")]
你的这句是什么意思???你把该句改成默认的:[WebService(Namespace = "http://tempuri.org/")]
试试!!!2、
另外,既然你返回的是字符串数组,直接声明一个字符串数组即可,感觉没必要用泛型:
string[] items=new string[count];然后赋值的时候:
SqlDataReader myDR = myCmd.ExecuteReader();
int i=0;
while (myDR.Read())
{
items[i] = myDR["zip"].ToString().Trim();
i++;
} return items;
items.Add(auid);
改成
items.Add("'" + auid + "'");
看看告诉我一下结果
只能分一點給其它也出過力的。
正確的代碼再貼一次:
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections.Generic; //System.Collections.Generic是List的命名空間
using System.Data.SqlClient;
using System.Web.Script.Services;[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService] //用於調用web service標簽
public class WebService : System.Web.Services.WebService
{
public WebService() { }
[WebMethod]
public string[] GetUsers(string prefixText, int count) //兩個參數分別是輸入文本跟提示項數
{
List<string> items = new List<string>(count);
SqlConnection myCon = new SqlConnection("Data Source=**;Initial Catalog=**;User ID=**;Password=**");
myCon.Open(); //打開數據庫連接
SqlCommand myCmd = new SqlCommand("select top " + count + " convert(varchar(10),zip) as zip from test where convert(varchar(10),zip) like '" + prefixText + "%'", myCon);
SqlDataReader myDR = myCmd.ExecuteReader();
string auid;
//int i = 0;
while (myDR.Read())
{
auid = myDR["zip"].ToString().Trim();
auid = "'" + auid + "'";
items.Add(auid);
}
myCon.Close(); //關閉數據庫連接
return items.ToArray();
}
}