首先,請幫助我!我再也受不了了。我找不到錯誤的位置。這是我的問題:通過C#Winform應用程序更新語句更新0行?
我想通過C#winform應用程序更新一行。從應用程序生成的更新查詢格式正確。我在sql server環境中測試過它,它運行良好。當我從應用程序運行它時,我得到0行更新。
下面是使用反射生成更新語句的代碼片段 - 不要試圖弄清楚它。進行代碼部分之後讀:下面
public void Update(int cusID)
{
SqlCommand objSqlCommand = new SqlCommand();
Customer cust = new Customer();
string SQL = null;
try
{
if ((cusID != 0))
{
foreach (PropertyInfo PropertyItem in this.GetType().GetProperties())
{
if (!(PropertyItem.Name.ToString() == cust.PKName))
{
if (PropertyItem.Name.ToString() != "TableName")
{
if (SQL == null)
{
SQL = PropertyItem.Name.ToString() + " = @" + PropertyItem.Name.ToString();
}
else
{
SQL = SQL + ", " + PropertyItem.Name.ToString() + " = @" + PropertyItem.Name.ToString();
}
}
else
{
break;
}
}
}
objSqlCommand.CommandText = "UPDATE " + this.TableName + " SET " + SQL + " WHERE " + cust.PKName + " = @cusID AND PhoneNumber = " + "'" + "@phNum" + "'";
foreach (PropertyInfo PropertyItem in this.GetType().GetProperties())
{
if (!(PropertyItem.Name.ToString() == cust.PKName))
{
if (PropertyItem.Name.ToString() != "TableName")
{
objSqlCommand.Parameters.AddWithValue("@" + PropertyItem.Name.ToString(), PropertyItem.GetValue(this, null));
}
else
{
break;
}
}
}
objSqlCommand.Parameters.AddWithValue("@cusID", cusID);
objSqlCommand.Parameters.AddWithValue("@phNum", this.PhoneNumber);
DAL.ExecuteSQL(objSqlCommand);
}
else
{
//AppEventLog.AddWarning("Primary Key is not provided for Update.")
}
}
catch (Exception ex)
{
//AppEventLog.AddError(ex.Message.ToString)
}
}
這部分:
objSqlCommand.CommandText = "UPDATE " + this.TableName + " SET " + SQL + " WHERE " + cust.PKName + " = @cusID AND PhoneNumber = " + "'" + "@phNum" + "'";
生成DML:
UPDATE CustomerPhone SET PhoneTypeID = @PhoneTypeID, PhoneNumber = @PhoneNumber WHERE CustomerID = @cusID AND PhoneNumber = '@phNum'
@PhoneTypeID和@PhoneNumber從兩個特性得到。我們從用戶輸入文本框中將值分配給表示層中的這些屬性。下面,說明由部分獲取的值:
objSqlCommand.Parameters.AddWithValue("@" + PropertyItem.Name.ToString(), PropertyItem.GetValue(this, null));
下面的代碼填充的WHERE的值:
objSqlCommand.Parameters.AddWithValue("@cusID", cusID);
objSqlCommand.Parameters.AddWithValue("@phNum", this.PhoneNumber);
最後的代碼應看:
UPDATE CustomerPhone
SET PhoneTypeID = 7, PhoneNumber = 999444
WHERE CustomerID = 500 AND PhoneNumber = '911';
手機類型ID是7 - 從文本框取得的用戶值 電話號碼爲999444 - 取自文本框的用戶值
上述最終更新語句適用於sql環境,但通過應用程序運行 時,execute非查詢運行正常,並獲得0行更新!我想知道爲什麼?
我會檢查你的解決方案,順便說一下電話號碼是串....我會回來 – peace 2010-05-29 10:43:05
我得到一個錯誤,指出:
UPDATE語句衝突與外鍵約束...
我試圖更新的表有兩個fk的列和一個常規列。沒有主鍵。 – peace 2010-05-29 12:39:45
CustomerID和PhoneTypeID是fk的 – peace 2010-05-29 12:40:11