0

型変換の処理に問題があります...

コード:

public static string isLocalIncidentSubmitted()
{

    string query = "SELECT Submit From [MVCOmar].[dbo].PrideMVCSubmitLog WHERE ReportID=@existingNum";

    DataTable dt = new DataTable();
    SqlConnection connection = new SqlConnection(connectionStr4);

    SqlCommand command = new SqlCommand(query, connection);
    command.Parameters.AddWithValue("@existingNum", MyGlobals1.secondversionDisplayTesting);

    connection.Open();
    SqlDataAdapter adp = new SqlDataAdapter(command);
    adp.Fill(dt);
    connection.Close();
    command.Dispose();
    connection.Dispose();


        return dt.Rows[0]["Submit"].ToString();   

}

テーブル送信はタイプvarcharです

大きなエラーが発生しますが、最初の数行は次のとおりです。

System.Data.SqlClient.SqlException:文字列からuniqueidentifierへの変換時に変換に失敗しました。
System.Data.SqlClient.SqlConnection.OnError(SqlException例外、ブール値breakConnection)で
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException例外、ブール値breakConnection)で
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)で
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet BulkCopyHandler、TdsParserStateObject stateObj)で
System.Data.SqlClient.SqlDataReader.HasMoreRows()で
4

3 に答える 3

3

ReportIDGuidまたはSQLのように見えますがuniqueidentifier、文字列値を指定しようとしています。そのクエリで正しいフィールドを使用していることを確認しますか?

あなたMyGlobals1.secondversionDisplayTestingが文字列の場合は、次のようにします。

Guid g = Guid.Parse(MyGlobals1.secondversionDisplayTesting);
command.Parameters.AddWithValue("@existingNum", g);
于 2012-06-22T18:58:56.730 に答える
0

問題は、返されるものではなく、実行しようとしているSQLにあるようです。returnステートメント以外のすべてをtry/catchでラップすると、これを確認できると確信しています。あなたのSQLはあなたの問題が存在するところです。

MSDN(http://msdn.microsoft.com/en-us/library/ms187942.aspx)から:uniqueidentifierタイプは、文字式からの変換の目的で文字タイプと見なされるため、切り捨て規則の対象となります。文字タイプに変換するため。つまり、文字式が異なるサイズの文字データ型に変換されると、新しいデータ型に対して長すぎる値は切り捨てられます。「例」セクションを参照してください。

例次の例では、uniqueidentifier値をcharデータ型に変換します。

 DECLARE @myid uniqueidentifier = NEWID();
 SELECT CONVERT(char(255), @myid) AS 'char';
于 2012-06-22T19:04:32.267 に答える
0

次のように、パラメーターのタイプとサイズを指定できるように、.AddWithValueの代わりに.Addを使用してみてください。

command.Parameters.Add("@existingNum", SqlDbType.UniqueIdentifier).Value = MyGlobals1.secondversionDisplayTesting;
于 2012-06-22T19:06:44.960 に答える