1

データベーステーブルにデータを挿入したい:

myCommand.CommandText = "INSERT INTO Selectionner (IdPrestation,
   IdPhrase, DegreUrgence,RisqueConcerne,rowguid,Cotation) " +                                                               
   "VALUES   ('" +new Guid(emp.IdPrestation) + 
   "', '" +new Guid(emp.IdPhrase)+ "', '" +
   emp.DegreUrgence + "','" + emp.RisqueConcerne + "','" + 
   new Guid(emp.rowguid) + "','" + emp.Cotation + "')";

しかし、これはエラーを返します:

Guidには、32桁のダッシュと4つのダッシュ
(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)が含まれている必要があります。

このエラーを解決するにはどうすればよいですか?

4

3 に答える 3

6

あなたの1つまたは多く

emp.IdPrestation //Or 
emp.IdPhrase //Or 
emp.rowguid //Check them before creating 

です/ではありませんGUIDこれがエラーをスローしている理由です。

編集:開始

Guid.TryParse()解析操作が成功した場合にtrueを返す使用方法。それ以外の場合はfalse。

//How to parse safely
Guid IdPrestation;
Guid IdPhrase;
Guid rowguid;

if(Guid.TryParse(emp.IdPrestation, out IdPrestation) &&
   Guid.TryParse(emp.IdPhrase, out IdPhrase) &&
   Guid.TryParse(emp.rowguid, out rowguid) )
{
   //all variables have been parse successfully
   //Execute the sql query as follows using parameters
}

編集:終了

また、インラインSQLを使用してパラメータを直接文字列として渡すことはunsafe bad practiceです。代わりにuse a parameterised query

myCommand.CommandText = "INSERT INTO yourTableName (c1, c2, ...)
VALUES (@p1, @p2,...)";
myCommand.Parameters.Add(new SqlParameter("p1", valueforCol1));
myCommand.Parameters.Add(new SqlParameter("p2", valueforCol2));
...
于 2012-12-12T09:09:12.853 に答える
4

最初の改善として、パラメーター化されたクエリを使用してみてください。

次に、new Guid(string s ) の代わりにGuid.Parse(string s)を使用してみてください。そうすれば、準拠していない文字列に対して例外が発生することを期待しています。

コンストラクターは少し寛大すぎるかもしれません。この場合、どのフィールドが問題を引き起こしているかを知るために、フェイルファストを使用する必要があります。

于 2012-12-12T09:13:43.380 に答える