2016-05-03 4 views
1

Я попытался написать этот очень простой код, чтобы найти проблему без каких-либо переменных, но я не могу. Если я копирую один и тот же запрос в sqldeveloper, он работает. ServerVersion все еще отображается правильно в окне сообщений.Почему cmd.executeNonQuery() throw ManagedDataAccess.Client.OracleException?

Функция вызывается как: new Dal().testCon();

public OracleConnection con; 

public Dal() 
{ 
    con = new OracleConnection(); 
    con.ConnectionString = "User Id=satan;Password=666;Data Source=MyDB"; 
} 

public void testCon() 
{ 
    con.Open(); 
    MessageBox.Show(con.ServerVersion); 
    OracleCommand cmd = new OracleCommand("insert into myuser values(1,'Pornstar','xxx',18);", con); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
} 

Stack-trace

+1

Если вы хотите кого-то, чтобы помочь вам с ошибкой, вам необходимо отправить сообщение об ошибке подробные (т.е. трассировки стека , а не только сообщение из внешнего исключения) – Tibrogargan

+0

вытащите ';' в конце вашего оператора вставки – cableload

+0

Спасибо, даже не думал о том, что точка с запятой может быть ошибкой до сих пор. :) – HalfGod

ответ

2

Ошибка вызвана в том числе и точка с запятой в SQL. Измените строку запроса на "insert into myuser values(1,'Pornstar','xxx',18)".

Я также рекомендую двигаться соединение в методе testCon, например, так:

private const string ConnectionString = "User Id=satan;Password=666;Data Source=MyDB"; 

public Dal() 
{ 
} 

public void testCon() 
{ 
    using (OracleConnection connection = new OracleConnection(ConnectionString)) 
    { 
     OracleCommand cmd = new OracleCommand("insert into myuser values(1,'Pornstar','xxx',18)", connection); 
     cmd.Connection.Open(); 
     MessageBox.Show(connection.ServerVersion); 
     cmd.ExecuteNonQuery(); 
    } 
} 
+0

lol, я не могу поверить часам отходов, потому что точка с запятой ... Большое спасибо. :) – HalfGod

+0

Был там до :-) С удовольствием помог – AGB