簡體   English   中英

嘗試在foreach中創建時未形成字符串

[英]String not formed when trying to create inside a foreach

我有一個班級People_val。 我在另一個類中列出了這個類。 現在我在這個列表上做一個foreach,對於我稱之為ToSQL()函數的每個項目,它給我一個插入查詢。 列表計數超過50,000條記錄。 第9774號查詢未完全形成。 9771 INSERT INTO CONVERSION_PEOPLE_VALIDATION VALUES(16413,'Jnto','Johnson',因為這個命令沒有被執行而且事務被回滾。我應該怎么做才能獲得foreach中的完整字符串。

public class People_Val
{
    public int MEMBERS_ID;
    public string PFirstName;
    public string PLastName;

    public DateTime? BIRTH_DATE;
    public string RELATIONSHP;

    public string ToSQL()
    {            
        return string.Format("INSERT INTO CONVERSION_PEOPLE_VALIDATION VALUES ({0},'{1}','{2}','{3}', TO_CHAR('{4}', 'DD-MON-YYYY'))",
                             MEMBERS_ID, PFirstName.Replace("'","\""), PLastName.Replace("'","\""), RELATIONSHP, BIRTH_DATE);
    }
}

public void insertPeopleValTrans(List<People_Val> _lstPeoplevals)
{
    int count=0;
    TextWriter tw = new StreamWriter(@"C:\PeopleVal.txt");
    using (OracleConnection conn = new OracleConnection(connectionStr)) {
        conn.Open();
        OracleTransaction trans;
        trans = conn.BeginTransaction();
        try {
            foreach (People_Val peopleVal in _lstPeoplevals) {
                OracleCommand cmd = new OracleCommand(peopleVal.ToSQL(), conn, trans);
                cmd.ExecuteNonQuery();
                count++;
                if (count % 500 == 0) {
                    Console.WriteLine("saving " + count.ToString() + " Records");
                }
                tw.WriteLine(count.ToString()+" "+ peopleVal.ToSQL());
            }
            trans.Commit();
            tw.Close();
        } catch (Exception ex) {
            Console.WriteLine(ex.Message);
            trans.Rollback();
        }
        conn.Close();
    }          
}

您可能在某些數據中有一個撇號,導致您的查詢失敗。

嘗試參數化輸入......看起來RELATIONSHIP字段是原始數據,可能是問題所在。 看看http://www.devart.com/dotconnect/oracle/articles/parameters.html我很確定這會讓你感到厭煩。

粘貼在9771行讓我們看看......

是否真的有必要讓所有50000條記錄一起成功或失敗? 否則跳過交易或至少提交一點,可能像......

if (count % 500 == 0)
{
    trans.Commit();
    Console.WriteLine("saving " + count.ToString() + " Records");
    trans = conn.BeginTransaction();
}

我同意這些主流評論,這將是使用Entity Framework Code First的最小努力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM