C # Кэширование сбрасывает строки при синхронизации с базой данных - PullRequest
0 голосов
/ 22 сентября 2009

я использую временную таблицу для хранения данных, чтобы отобразить их в виде таблицы, а затем из этой таблицы в базу данных, я использую кеш для этого процесса

Проблема:
иногда одна запись из таблицы не загружается в базу данных. если я использую точку останова, она работает.

if (Cache["Info"] != null)
{
       Table = (DataTable)Cache["Info"];
       Table.Rows.Add(0, this.ddl1.SelectedItem.ToString(), 
                this.ddl1.SelectedValue.ToString());
       Table.Rows.Add(Table.Rows.Count, this.ddl2.SelectedItem.ToString(), 
                this.ddl2.SelectedValue.ToString());
}

foreach (DataRow dr in Table.Rows) 
{
  this.SetInfo(Convert.ToInt32(dr["No"]), Convert.ToString(dr["ID"])); 
} 

запрос на вставку данных:

INSERT INTO sample(field1, field2, field3, field4, field5, field6)
VALUES
(@field1, @field2, @field3, @field4, @field5, @field6)

try
{
    if (this.sqlCon.State == ConnectionState.Closed)
        this.sqlCon.Open();

    this.sqlCmd = new SqlCommand("procedure_name", this.sqlCon);
    this.sqlCmd.CommandType = CommandType.StoredProcedure;

    this.sqlCmd.Parameters.Add(new SqlParameter("@field1", SqlDbType.VarChar));
    this.sqlCmd.Parameters["@field1"].Value = value;

    this.sqlCmd.Parameters.Add(new SqlParameter("@field2", SqlDbType.VarChar));
    this.sqlCmd.Parameters["@field2"].Value = value;

    this.sqlCmd.Parameters.Add(new SqlParameter("@field3", SqlDbType.VarChar));
    this.sqlCmd.Parameters["@field3"].Value = value;

    this.sqlCmd.Parameters.Add(new SqlParameter("@field4", SqlDbType.Int));
    this.sqlCmd.Parameters["@field4"].Value = value;

    this.sqlCmd.Parameters.Add(new SqlParameter("@field5", SqlDbType.VarChar));
    this.sqlCmd.Parameters["@field5"].Value = value;

    this.sqlCmd.Parameters.Add(new SqlParameter("@field6",SqlDbType.DateTime));
    this.sqlCmd.Parameters["@field6"].Value = value;

    this.sqlCmd.ExecuteNonQuery();
}
catch (Exception ex) { }

Ответы [ 3 ]

0 голосов
/ 22 сентября 2009

попробуйте использовать этот код, может помочь:

var Table = Cache["Info"] as DataTable;

if (Table != null)
{       
   ......

Хотя это только синтаксически отличается, но так как ваш код работает, если вы установите точку останова, это может помочь. Это как перезапуск сервера dev или перезагрузка машины:)

Если он все еще не работает, пожалуйста, прочитайте этот великий пост Рик Штрал

ПРИМЕР: я установил две страницы, на первой я добавляю значения в datatable в кеше (функция AddClicked), а на второй странице я получаю datatable и привязываю к gridview, и это работает нормально.

private DataTable CreateTable()
{
    var dtb = new DataTable();
    dtb.Columns.Add(new DataColumn("SerialNo", typeof(int)));
    dtb.Columns.Add("Item");

    for (var i = 1; i < 11; i++)
        dtb.Rows.Add(new object[] { i, i + "" });

     Cache.Add("data", dtb, null, Cache.NoAbsoluteExpiration, 
        TimeSpan.FromMinutes(60), CacheItemPriority.Normal, null);

    return dtb;
}

protected void AddClick(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(txtItem.Text)) return;

    var table = Cache["data"] as DataTable;

    if (table == null) return;

    var i = table.Rows.Count + 1;

    table.Rows.Add(new object[] { i, txtItem.Text });

    BindData(table);
}

ЭТО НА ВТОРОЙ СТРАНИЦЕ

    private void BindData()
    {
        var dtb = Cache["data"] as DataTable;
        if (dtb == null) return;
        grdTest.DataSource = dtb;
        grdTest.DataBind();
    }
0 голосов
/ 22 сентября 2009

Кэширование носит временный характер и может быть прекращено в любое время.

Вместо этого следует использовать объекты сеанса или приложения.

0 голосов
/ 22 сентября 2009

Если это так, возможно, ваша временная таблица удаляется ... может быть, из-за вызова закрытия соединения ... также не могли бы вы рассказать, что вы пытаетесь сделать ....

посмотрите эту ссылку, чтобы узнать больше о временных таблицах

http://databases.aspfaq.com/database/should-i-use-a-temp-table-or-a-table-variable.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...