1

以下のコードでは、リストへの参照とともにメソッドを呼び出して、各オブジェクトから名前、年齢、性別、情報などのすべてのデータを保存しますが、アプリケーションをテストした後、テーブルは空です! 私は何かを逃したか、間違ったことをしましたか? エラーは発生しません。

public void SaveDataToDB(List<Animal> animals)
    {
        connection = new SqlConnection(connectionString);
        dataset = new DataSet();
        sql = "SELECT * From Guests";

        try
        {
            connection.Open();
            adapter = new SqlDataAdapter(sql, connection);
            adapter.Fill(dataset, "Guests");

            foreach (Animal animal in animals)
            {
                DataRow row = dataset.Tables["Guests"].NewRow();
                row["Name"] = animal.Name;
                row["Age"] = animal.Age;
                row["Gender"] = animal.Gender;
                row["Info"] = animal.ImportantInfo;

                dataset.Tables["Guests"].Rows.Add(row);
            }
            new SqlCommandBuilder(adapter);
            adapter.Update(dataset.Tables["Guests"]);
            connection.Close();
        }
        catch
        {
            throw;
        }
    }
4

1 に答える 1

1

挿入が正しく機能するInsertCommandためには、アダプタの を定義する必要があります。サンプルは次のとおりです。

public void SaveDataToDB(List<Animal> animals)
{
    SqlConnection connection = new SqlConnection(connectionString);
    DataSet dataset = new DataSet();
    string sql = "SELECT * From Guests";

    try
    {
        connection.Open();
        SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);
        adapter.Fill(dataset, "Guests");

        // Create the InsertCommand.
        SqlCommand command = new SqlCommand(
            "INSERT INTO Guests (Name, Age, Gender, ImportantInfo) " +
            "VALUES (@Name, @Age, @Gender, @ImportantInfo)", connection);

        // Add the parameters for the InsertCommand.
        command.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name");
        command.Parameters.Add("@Age", SqlDbType.Int, 4, "Age");
        command.Parameters.Add("@Gender", SqlDbType.NVarChar, 6, "Gender");
        command.Parameters.Add("@ImportantInfo", SqlDbType.NVarChar, 100, "ImportantInfo");

        foreach (Animal animal in animals)
        {
            DataRow row = dataset.Tables["Guests"].NewRow();
            row["Name"] = animal.Name;
            row["Age"] = animal.Age;
            row["Gender"] = animal.Gender;
            row["Info"] = animal.ImportantInfo;

            dataset.Tables["Guests"].Rows.Add(row);
        }
        new SqlCommandBuilder(adapter);
        adapter.Update(dataset.Tables["Guests"]);
        connection.Close();
    }
    catch
    {
        throw;
    }
}

db パラメータには、実際の db のタイプとサイズを指定してください。

于 2012-08-02T12:05:38.057 に答える