1

「Remisiones」という SQL Server 2012 データベースに接続しようとしています。接続文字列が正しいことを確認するために行ったことは、プロジェクトのプロパティから作成することでした (設定セクション、そこから接続文字列を追加し、接続を正常にテストしました)。結果の接続文字列は次のとおりです。

<configuration>
    <connectionStrings>
        <add name="Remisiones.Properties.Settings.ConnString" connectionString="Data Source=ComputerName\SQLEXPRESS;Initial Catalog=Remisiones;Integrated Security=True"
        providerName="System.Data.SqlClient" />
    </connectionStrings>
    More configuration...
</configuration>

次に、それを使用してデータベースに接続するには、次のようにします。

using (OdbcConnection connection = new OdbcConnection(ConfigurationManager.ConnectionStrings["Remisiones.Properties.Settings.ConnString"].ConnectionString))
{
    connection.Open();
    using (OdbcCommand command = new OdbcCommand("SELECT ID, Date FROM Remisiones", connection))
    using (OdbcDataReader dr = command.ExecuteReader())
    {
        while (dr.Read())
        {
            Result.Text += dr["ID"].ToString();
            Result.Text += "\n";
            Result.Text += dr["Date"].ToString();
            break;
        }
        Result.Text += "</table>";
    }
    connection.Close();
}

ご覧のとおり、これにより、データベース内の最初の 2 つの項目の Date 列と ID 列の値が出力されます。問題は、代わりにエラーが表示されることです。

ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.Odbc.OdbcException: ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

私は何を間違えましたか?

編集:エラーはconnection.Open();行で発生します

4

4 に答える 4

3

System.Data.Odbc接続とコマンドを使用していますが、System.Data.SqlClient接続文字列を渡そうとしています。この2つは互換性がありません。

接続文字列をOdbcバージョンに変更するか、コードをSqlClientバージョンに変更します。(SQL Server DBの場合は、後者をお勧めします。)

オプション2を使用すると、コードは次のように変更されます。

コードファイルの先頭にある「using」ステートメントを変更する必要があります(コードサンプルには表示されませんが、そこにあると確信しています)。

using System.Data.SqlClient;

それ以外の

using System.Data.Odbc;

次に、次のusingステートメントが機能するはずです(構文エラーがないかチェックしませんでしたが、間違いがあった場合はIntellisenseが役立ちます)

using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Remisiones.Properties.Settings.ConnString"].ConnectionString))
{
    connection.Open();
    using (SqlCommand command = new SqlCommand ("SELECT ID, Date FROM Remisiones", connection))
    using (SqlDataReader dr = command.ExecuteReader())
    {
        while (dr.Read())
        {
            Result.Text += dr["ID"].ToString();
            Result.Text += "\n";
            Result.Text += dr["Date"].ToString();
            break;
        }
        Result.Text += "</table>";
    }
    connection.Close();
}

System.Data.SqlClientやSystem.Data.OleDbなど、多数の接続文字列サンプルがここにあります。

于 2012-06-15T20:46:30.437 に答える
1

あなたの接続文字列はのためのものであるように見えますproviderName="System.Data.SqlClient"が、あなたのコードは-を使用しています- (そして、SqlDataReader`など)をOdbcConnection変更するとあなたを整理する必要がありますSqlConnectionSqlCommand

于 2012-06-15T20:46:42.353 に答える
0

odbc構成ツール(コントロールパネル)でodbc接続を設定する必要があります。または、odbcではなくsqlconnectionを使用することもできます。

于 2012-06-15T20:46:24.010 に答える
0

接続文字列は文字列ではSqlConnectionなくODBCConnection文字列です。ODBC接続文字列は次のようになります。

Driver = {Microsoft Access Driver(* .mdb)}; DBQ = C:\ Samples \ Northwind.mdb

接続文字列を使用するSqlConnectionか、有効なODBC接続文字列に更新してください。

于 2012-06-15T20:46:35.200 に答える