アプリケーションをデバッグすると、SelectCommand.Connectionプロパティが初期化されていないというエラーが発生します。私はここで何をしているのか分からない。私は実際にテキストボックスのtextchangedイベントで検索してフィルタを追加したいと思っています。SellectCommad.connectionプロパティが初期化されていません
あなたcn
変数が
null
で、初期化され得ていないためだ
public class ConnectionClass
{
static SqlConnection cn;
public static SqlConnection Connection()
{
string myConnection = ConfigurationManager.ConnectionStrings["_uniManagementConnectionString1"].ConnectionString;
if (cn != null)
{
cn = new SqlConnection(myConnection);
cn.Open();
}
return cn;
}
}
public class ClassDataManagement
{
SqlConnection cn = ConnectionClass.Connection();
public DataTable GetData(string SQL)
{
SqlCommand cmd = new SqlCommand(SQL, cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
protected void TextBoxFilterText_TextChanged(object sender, EventArgs e)
{
ClassDataManagement dm = new ClassDataManagement();
string query = "Select CourseCode from _Courses where coursecode like'%" + TextBoxFilterText.Text.TrimEnd() + "%'";
dm.GetData(query);
GridViewCourses.DataBind();
}
SQLインジェクションの脆弱性があります。パラメータを使用してください。それとは別に、あなたは接続を決して閉じていないので、「接続が多すぎます」という例外が出るかもしれませんが、確かにパフォーマンスが低下します。静的フィールドに接続を保存しないほうがよいでしょう。オンデマンドで接続オブジェクトを作成し、接続プーリングが接続を管理できるようにします。 http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx –
時には、OPが.configファイルにそのsqlコードを入れるとどうなるのですか? – MethodMan
@DJ Kraze:申し訳ありませんが、私はあまりよくありません。問題は接続文字列ではなく、このクラス全体です。 ADO.NETでは、(静的な)グローバル接続クラスは、ADO.NETのノー・ゴーの1つです.SqlParametersを使用していない場合は、接続の作成、オープン、使用、終了は短期間で、 (ASP.NETのような)スレッド環境です。 –