Oracle DataBaseからデータを動的に取得するGridViewがあります。GridView DataSourceのUpdateCommandがエラーを返しますORA-01036:不正な変数名/数値
<asp:GridView ID="gvData" runat="server" DataSourceID="DS" CellPadding="4"
ForeColor="#333333" AllowSorting="True" AllowPaging="True"
ShowFooter="True" AutoGenerateDeleteButton="True"
AutoGenerateEditButton="True" AutoGenerateSelectButton="True"
OnRowDataBound="gvData_RowDataBound"
OnSelectedIndexChanged="gvData_SelectedIndexChanged"
OnRowUpdating="gvData_RowUpdating" OnRowUpdated="gvData_RowUpdated"
OnRowDeleting="gvData_RowDeleting" OnRowDeleted="gvData_RowDeleted">
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True"
ForeColor="#333333" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#CCCCCC" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>
<asp:SqlDataSource ID="DS" runat="server">
</asp:SqlDataSource>
それはDELETEステートメントを/ SELECT/INSERTで正常に動作しますが、しかし、それは声明を更新するために来るとき、それは誤りORA-01036を返します。不正な変数名/番号
protected void gvData_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
double number;
List<string> text = new List<string>();
List<string> pkParam = new List<string>();
TextBox tb = new TextBox();
LinkButton lb = new LinkButton();
for (int i = 1; i < gvData.HeaderRow.Cells.Count; i++)
{
try
{
lb = (LinkButton)gvData.HeaderRow.Cells[i].Controls[0];
tb = (TextBox)gvData.Rows[e.RowIndex].Cells[i].Controls[0];
if (tb.Text.Length > 0 && !Settings.PK.Contains(lb.Text))
if(Double.TryParse(tb.Text.ToText(), out number))
text.Add(lb.Text + " = " + number);
else
text.Add(lb.Text + " = " + "'" + tb.Text.ToText() + "'");
}
catch { }
}
foreach (string pk in Settings.PK)
{
pkParam.Add(pk + " = :" + pk);
DS.UpdateParameters.Add(
new Parameter(pk, TypeCode.String, e.Keys[pk].ToString()));
}
DS.UpdateCommand = string.Format("UPDATE {0} SET {1} WHERE {2}",
Settings.TABLE, string.Join(",", text.ToArray()),
string.Join(" AND ", pkParam.ToArray()));
}
コードRowUpdateは本当に重要ではありません。私はすべての更新ステートメントを記述し、同じエラーを返します。 アイデア、人々?あなたの前にありがとう!
サンプルクエリ:
DS.UpdateCommand = "UPDATE ATDB.CTD_PROBLEM_EDIT_V SET CUTTING_COMMENTS = 'rrr'";
PK:
public static string[] PK = new string[] { "PROBLEM_DEPTH_MD", "API", "BUS_AREA_ID" };
コードが問題であるとは私は確信していません。 UPDATEステートメントが失敗すると言います。失敗するSQL文の例を提供できますか?また、Settings.PKの値を確認するのに役立ちますか? – Alban
編集を参照してください。私はPL/SQL Developerでこのクエリ(および他の多くのもの)をテストしました。 DS.UpdateCommandに "UPDATE"を入れても、同じエラーが出ます。そして、ここの原型のキーが何であるかは本当に問題ではありません。異なるキーで別のテーブルを使用することができます。注:deleteステートメントは同じSettings.PKを使用し、正常に動作します。 –
ちょうどいくつかのスタイルの提案:色の宣言を取り除き、CSSを使用して、aspxコードを少しきれいにする; NLogを使用して、catch文の中にlog文を出力します。例外がスローされたことを認識したときに多くのエラーが検出されます。 – verisimilidude