-2

文字列の配列からランダムな要素を選択してデータベースに保存しようとしています。

OleDbConnection myConnection = new OleDbConnection(connectionString);
myConnection.Open();
string Update = string.Format("UPDATE Ships SET InPort=True");
OleDbCommand myCommandUpdt = new OleDbCommand(Update);
myCommandUpdt.Connection = myConnection;
myCommandUpdt.ExecuteNonQuery();
OleDbDataReader drdrShipsRead = myCommandUpdt.ExecuteReader();

string[] Randominporta = { "True", "False", "False" };
// Testlabel.Text = Convert.ToString(Randominport[randomNumber]);

int iNumber = 1;
while (drdrShipsRead.Read())
{
    int randomNumber = random.Next(0, 3);
    string myAddingQuery = string.Format(" UPDATE Ships SET InPort= " + Convert.ToString(Randominport[randomNumber]) + " WHERE ID= " + iNumber + "");
    OleDbCommand myCommand = new OleDbCommand(myAddingQuery);

   string myCommand.Connectionresult = myConnection;
    myCommand.ExecuteNonQuery();
    iNumber++;
}

それは動作しません。

4

3 に答える 3

2

これを行う簡単な方法は次のとおりです。

var a = new List<string> { "True", "False", "False" };

int index = random.Next(strings.Count);
var name = a[index];
a.RemoveAt(index);
return name;
于 2012-10-22T10:50:36.273 に答える
1

@CodesInChaos のおかげで、質問のコードは一般的に正しいと思いますが、配列を正しく宣言していません。

試す、

var randomImport = new [] { "True", "False", "False" };

これを行うと、脆弱性が少なくなります

var randomImport = new [] { "True", "False", "False" };
var randomNumber = random.Next(0, randomImport.Length);

また、

var randomNumber = random.Next(
    randomImport.GetLowerBound(0),
    randomImport.GetUpperBound(0) + 1);
于 2012-10-22T10:21:21.673 に答える
0

Jodrellの回答に加えて、以下の行を変更して、SET InPort値への引用符を含める必要があります。

    string myAddingQuery = string.Format(" UPDATE Ships SET InPort= '" + Convert.ToString(Randominport[randomNumber]) + "' WHERE ID= " + iNumber + "");
于 2012-10-22T10:24:54.130 に答える