[Mono-dev] ORA-01480 Error. Maybe a bug

David jiangchengyao at gmail.com
Sun Dec 10 08:39:15 EST 2006


When I use OracleParameter to insert Chinese string into oracle database,it
cast error like followings:
ORA-01480: trailing null missing from STR bind value

It happens only when I insert chinese string to database, no error when
inserting english string.

But when I use direct insert sql string,no error happens for both chinese
string and english string.

Error sample:

Test_Error.aspx
<%@ Page Language="C#" %>
<%@ Assembly Name="System.Data.OracleClient" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OracleClient" %>

<body>
        <form runat="server">
                <asp:TextBox runat="server" id="content"/>
                <input type="Button" Value="Click" runat="server"
id="button"  OnServerClick="OnClick"/>
        </form>
</body>

<script runat="server">
        public void OnClick(object sender,EventArgs e){
                if(content.Text != String.Empty || content != null){
                        Response.Write(content.Text);
                        String connString =
"Server=//127.0.0.1:1521/david;User Id=mono;Password=jcyjcy";
                        OracleConnection conn = new
OracleConnection(connString);
                        try{
                                conn.Open();
                                Response.Write("OpenSucess");
                                OracleCommand command = new OracleCommand();
                                command.Connection = conn;
                                command.CommandType = CommandType.Text;
                                // here I use OracleParameter
                                String insertText = "insert into test values
(:name)";
                                command.CommandText = insertText;
                                command.Parameters.Add(":name",
OracleType.NVarChar,1000);
                                command.Parameters[0].Value = content.Text;
                                Response.Write(command.Parameters[0].Value);
                                int affectedRows = command.ExecuteNonQuery
();
                                if(affectedRows == 1)
                                        Response.Write("insert sucess");
                        }
                        catch(Exception ex){
                                Response.Write(ex.Message);
                        }
                        finally{
                                conn.Close();
                        }
                }
        }
</script>

No error sample:

No_error.aspx
<%@ Page Language="C#" %>
<%@ Assembly Name="System.Data.OracleClient" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OracleClient" %>

<body>
        <form runat="server">
                <asp:TextBox runat="server" id="content"/>
                <input type="Button" Value="Click" runat="server"
id="button"  OnServerClick="OnClick"/>
        </form>
</body>

<script runat="server">
        public void OnClick(object sender,EventArgs e){
                if(content.Text != String.Empty || content != null){
                        Response.Write(content.Text);
                        String connString =
"Server=//127.0.0.1:1521/david;User Id=mono;Password=jcyjcy";
                        OracleConnection conn = new
OracleConnection(connString);
                        try{
                                conn.Open();
                                Response.Write("OpenSucess");
                                OracleCommand command = new OracleCommand();
                                command.Connection = conn;
                                command.CommandType = CommandType.Text;
                                // not use OracleParameter, direct use sql
                                String insertText = String.Format("insert
into test values('{0}')",content.Text);
                                command.CommandText = insertText;
                                int affectedRows = command.ExecuteNonQuery
();
                                if(affectedRows == 1)
                                        Response.Write("insert sucess");
                        }
                        catch(Exception ex){
                                Response.Write(ex.Message);
                        }
                        finally{
                                conn.Close();
                        }
                }
        }
</script>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20061210/c010b970/attachment.html 


More information about the Mono-devel-list mailing list