0

データベースからの値で textBox を自動補完しようとしています。if弾丸テストを行うと、コードは以下の関数のステートメントまで歩きます。その後、私のコードが実行されない理由を教えてくださいif

次を実行しようとしていますが、の前に飛び出し続けますif:

public AutoCompleteStringCollection AutoCompleate(string dataBase, string procedure)
{
        AutoCompleteStringCollection namesCollection =
            new AutoCompleteStringCollection();

        SqlDataReader dReader;
        SqlCommand cmd = new SqlCommand(procedure, con);
        cmd.CommandType = CommandType.StoredProcedure;
        con.Open();
        dReader = cmd.ExecuteReader(); // This is the last place my bullet check 
                                       // gets before it hop's out!
        if (dReader.HasRows == true)
        {
            while (dReader.Read())
                namesCollection.Add(dReader["SystemUser"].ToString());
        }
        con.Close();
        dReader.Close();
        return namesCollection;
    }

追加情報ですが、上記に注目してください。


情報が必要な場合はお尋ねください。:)


上記への呼び出し:

textBoxUser.AutoCompleteMode = AutoCompleteMode.Suggest;
textBoxUser.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBoxUser.AutoCompleteCustomSource = 
    DatabaseService.Instance.AutoCompleate("AuditIT", "AutoCompleate");

ストアド プロシージャ:

USE [AuditIT]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--Allow textboxs to have a autocomplete
 ALTER procedure [dbo].[AutoCompleate] 
 as

 Select distinct SystemUser from SchemaAudit
             order by SystemUser asc
4

1 に答える 1

3

データベースにアクセスしようとすると、未処理の例外が発生します。次のようにコードをリファクタリングしてみてください。

try{

if (dataBase.Length > 0) { procedure = dataBase + ".." + procedure; } //Set procedure to DBNAME..ProcedureName

SqlDataReader dReader;
            SqlCommand cmd = new SqlCommand(procedure, con);
            cmd.CommandType = CommandType.StoredProcedure;
            con.Open();
            dReader = cmd.ExecuteReader(); // This is the last place my bullet check gets before it hop's out!
            if (dReader.HasRows == true)
            {
                while (dReader.Read())
                    namesCollection.Add(dReader["SystemUser"].ToString());
            }
            con.Close();
            dReader.Close();
}
catch(Exception e)
{
    // handle the exception better than me :)
    Console.WriteLine(e.Message);
}

console.WriteLine にメッセージボックスまたはブレークポイントを置いて、何が起こるか見てみましょう。

于 2012-06-15T08:48:41.380 に答える