0

これは、データベースに値があるかどうかを確認する select ステートメントを作成した方法です。

bool userIsPresent=false;
string sqlQuery = string.Format("SELECT * FROM Person WHERE Name = '{0}'", name);

SqlCommand s = new SqlCommand(sqlQuery, con);
con.Open();

SqlDataReader sqlread = s.ExecuteReader();
userIsPresent = sqlread.HasRows;
con.Close();

しかし、いくつかの値をデータベースに保存する必要があります。これどうやってするの ?を使うべきではないと思うSqlDataReaderのですが、データベースにデータが保存されているかどうかを確認するにはどうすればよいですか?

public static bool saveToDb(string name1,string nam2, DateTime dat)
{
    bool ok=false;
    string sqlQuery = string.Format("INSERT into NumbersTable values ('{0}', '{1}','{2}')",name1,nam2,dat );

    SqlCommand s = new SqlCommand(sqlQuery, con);

    con.Open();
    SqlDataReader sr = s.ExecuteReader(); // MIGHT BE WRONG
    ok = sr.HasRows;

    con.Close();
    return ok;
}
4

5 に答える 5

6

データベースにレコードを挿入するには、ExecuteNonQueryが必要です。

s.ExecuteNonQuery();

(パラメーター化されたクエリを使用して SQL インジェクションを防ぎます)

于 2013-02-18T08:02:43.073 に答える
1

さて、あなたが探しているのはデータベースへの挿入であり、データベースからの読み取りではないため、データベースでSQLクエリを実行するだけで、そこから選択されたデータを読み取る必要はありません。このためには、sqlDataReader ではなく ExecuteNonQuery ステートメントを使用する必要があります。結果は次のようになります

public static bool saveToDb(string name1, string nam2, DateTime dat)
{
  bool ok = false;
  string sqlQuery = "INSERT INTO NumbersTable VALUES (@name1, @nam2, @dat)";
  //This is the sql query we will use and by placing the @ symbol in front of words
  //Will establish them as variables and placeholders for information in an sql command
  //Next we create the sql command
  SqlCommand cmd = new SqlCommand(sqlQuery, con);
  //Here we will insert the correct values into the placeholders via the commands
  //parameters
  cmd.Parameters.AddWithValue("name1", name1);
  //This tells it to replace "@name1" with the value of name1
  cmd.Parameters.AddWithValue("nam2", nam2);
  cmd.Parameters.AddWithValue("dat", dat);
  //Finally we open the connection
  con.Open();
  //Lastly we tell the sql command to execute on the database, in this case inserting
  //the values
  int i = cmd.ExecuteNonQuery();
  //Here we have the results of the execution stored in an integer, this is because
  //ExecuteNonQuery returns the number of rows it has effected, in the case of this
  //Insert statement it would effect one row by creating it, therefore i is 1
  //This is useful for determining if your sql statement was successfully executed
  //As if it returns 0, nothing has happened and something has gone wrong
  con.Close();
}

これがお役に立てば幸いです。他に何か必要な場合はお気軽にお問い合わせください。

于 2013-02-18T10:22:37.790 に答える
0

これをコードに追加します。

con.open();
S.executeNonQuery();
于 2013-02-18T08:14:53.213 に答える
0

試してみてください...このコードは適切なメッセージを表示します
..name1、name2、datはデータベースのデータテーブルの列名です

public static void saveToDb()
{
string sqlQuery="INSERT into NumbersTable (name1,name2,dat) values ('Prince', 'Singhal','18/02/2012');
SqlCommand s = new SqlCommand(sqlQuery, con) ;
con.Open();
int i=s.ExecuteNonQuery();
if(i>=1)
{
MessageBox.Show("レコードが挿入されました");
}
else
{
MessageBox.Show("問題が発生する可能性があります!") ;
}
con.Close();
}

于 2013-02-18T11:26:54.780 に答える
-1

既存のコードのいくつかを修正する必要があります。間違いなくこれはあなたに役立ちます:

 public static bool executeMyQuery(string sqlQuery)
      {
        try
        {        con.Open();
                 SqlCommand s = new SqlCommand(sqlQuery, con);
                 s.ExecuteNonQuery();
                 con.Close();
                 return true;
         } 
       catch()
        {
          return false;
        }

    And use the above function[executeMyQuery()] anywhere you want to insert like and check whether record is inserted or not like below:

     bool isInserted = false;
     // give dummy value or get it what u want to inser on name1,nam2,dat
     string rawQuery = string.Format("INSERT into NumbersTable values ('{0}', '{1}','{2}')",name1,nam2,dat );

    isInserted = myExecuteQuery(rawQuery);

  if(isInserted)
    { 
      // lblStatus i am taking only to make you understand
      // lblStatus.text = "Record inserted succesfully";
    }
  else
    {
       // lblStatus.text = "Record insertion failed";
    }
于 2013-02-18T08:30:36.177 に答える