2017-08-10 11 views
0

関連this questionには動作しません:私は、「INSERT」ループの書き込みをしようとしている:私は、次のクエリを持っている:私はちょうど見つけることができる私のコードを(実行データ挿入ループは

CommandText = "INSERT into sample2Prot(timestp,idq,idz,prot,Lhowmany,Rhowmany) VALUES(@timestp,@idq,@idz,@prot,@Lhowmany,@Rhowmany)"; 

以下)私は次のエラーを取得する:

'@timestp' cannot be handle by SqlParameterCollection. ("timestp" = tableNames[0], of string type)

for (int j = 0; j < tableNames.Count; j++) 

// tableNames contains the name of the columns, tableTypes the types of the columns 
// tableTypes contains 
{ 
    if (tableTypes[j] == "INTEGER") 
    { 
      myCommand3.Parameters.Add("@" + tableNames[j], System.Data.SqlDbType.Int); 
      Console.WriteLine("@" + tableNames[j]); 
    } 
    else 
    { 
      myCommand3.Parameters.Add("@" + tableNames[j], System.Data.SqlDbType.VarChar); 
      Console.WriteLine("@" + tableNames[j]); 
    } 

} 

Console.WriteLine(myCommand3.CommandText); 
for (int f = 0; f < total.Count(); f++) 
{ 
    for (int k = 0; k < tableNames.Count; k++) 
    { 
      myCommand3.Parameters.Clear(); 
      myCommand3.Parameters["@" + tableNames[k]].Value = total[f][k]; 
    } 

    myCommand3.ExecuteNonQuery(); 
} 

は誰かのアイデアを持って?精度を求めても構いません。上記のコードで

+1

を。 EXACTとENTIREのエラーメッセージをコピーして貼り付けることはできますか?また、データベースの 'timestp'カラムのデータ型は何ですか? –

+0

myCommand3はどのタイプですか? SqlCommand?私はあなたが次のようなものを試してみたいと思うかもしれないと思います:CommandText = "sample2ProtへのINSERT(timestp、idq、idz、prot、Lhowmany、Rhowmany)VALUES(?、?、?、? – Tyron78

+0

さて、私は個人的には実行時にすべてのパラメータの値をチェックします。次に、それらをSQL文に挿入し、サーバ上で直接実行しようとします。また、Profilerを実行して、何かがデータベースに送られているかどうかを確認します。問題の原因となるNull値が存在する可能性があります。 – HLGEM

答えて

1
for (int f = 0; f < total.Count(); f++) 
{ 
    for (int k = 0; k < tableNames.Count; k++) 
    { 
      myCommand3.Parameters.Clear(); // < ==== PROBLEM is here! 
      // After clearing the Parameters, there is no Parameter "["@" + tableNames[k]]" 
      // hence "SqlParameter mit ParameterName '@timestp' ist nicht in SqlParameterCollection enthalten." 
      // (eng: SqlParameterCollection does not contain SqlParameter with name '@timestp') 
      myCommand3.Parameters["@" + tableNames[k]].Value = total[f][k]; 
    } 

    myCommand3.ExecuteNonQuery(); 
} 

、そのようClear()声明移動:C#のエラーメッセージのように見えない

for (int f = 0; f < total.Count(); f++) 
{ 
    for (int k = 0; k < tableNames.Count; k++) 
    { 
      myCommand3.Parameters["@" + tableNames[k]].Value = total[f][k]; 
    } 
    myCommand3.ExecuteNonQuery(); 
} 
myCommand3.Parameters.Clear();