Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用逗号插入命令_C#_Sql_Oracle - Fatal编程技术网

C# 用逗号插入命令

C# 用逗号插入命令,c#,sql,oracle,C#,Sql,Oracle,我正在Oracle中插入一行。但问题是我想在companyname列中插入逗号,由于insert语句,该列失败 想知道是否可以使用下面的insert命令添加逗号或撇号 string id=1; string orgnr = "123123"; comanyname = "Test,company"; string sql = string.Format("INSERT INTO VENDORS(ID, ORGNR, COMPANYNAME) " + "VALUES({0}, '{1}

我正在Oracle中插入一行。但问题是我想在companyname列中插入逗号,由于insert语句,该列失败

想知道是否可以使用下面的insert命令添加逗号或撇号

string id=1;
string orgnr = "123123";
comanyname = "Test,company";

string sql = 
  string.Format("INSERT INTO VENDORS(ID, ORGNR, COMPANYNAME) " +
  "VALUES({0}, '{1}', '{2}')", id, orgnr, companyname);

update = new OracleCommand(sql, connection);
update.Connection.Open();
update.ExecuteNonQuery();
update.Connection.Close();

它失败了,因为您已将“id”声明为字符串,并且一直尝试在没有单引号的情况下插入它。此外,字符串参数中还有要转义的非法字符。你想把这些扔掉吗?请继续阅读

代码中有一个更大的问题,您没有使用参数化查询。这段代码将主机应用程序转变为SQL注入平台

请查看以下代码:

int id=1;
string orgnr = "123123";
string companyName = "Test,company";

string connectionString = "Data Source= oraDB;User Id=;Password=;";
OracleConnection connection = new OracleConnection(connectionString);
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = connection;

cmd.CommandText = "INSERT INTO VENDORS(ID, ORGNR, COMPANYNAME) VALUES (:1, :2, :3)";

cmd.Parameters.Add(new OracleParameter("1",
                                       OracleDbType.Int32,
                                       id,
                                       ParameterDirection.Input));

cmd.Parameters.Add(new OracleParameter("2",
                                       OracleDbType.Varchar2,
                                       orgnr,
                                       ParameterDirection.Input));

cmd.Parameters.Add(new OracleParameter("3",
                                       OracleDbType.Varchar2,
                                       companyName,
                                       ParameterDirection.Input));

int rowsUpdated = cmd.ExecuteNonQuery();
connection.Dispose();

它失败了,因为您已将“id”声明为字符串,并且一直尝试在没有单引号的情况下插入它。此外,字符串参数中还有要转义的非法字符。你想把这些扔掉吗?请继续阅读

代码中有一个更大的问题,您没有使用参数化查询。这段代码将主机应用程序转变为SQL注入平台

请查看以下代码:

int id=1;
string orgnr = "123123";
string companyName = "Test,company";

string connectionString = "Data Source= oraDB;User Id=;Password=;";
OracleConnection connection = new OracleConnection(connectionString);
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = connection;

cmd.CommandText = "INSERT INTO VENDORS(ID, ORGNR, COMPANYNAME) VALUES (:1, :2, :3)";

cmd.Parameters.Add(new OracleParameter("1",
                                       OracleDbType.Int32,
                                       id,
                                       ParameterDirection.Input));

cmd.Parameters.Add(new OracleParameter("2",
                                       OracleDbType.Varchar2,
                                       orgnr,
                                       ParameterDirection.Input));

cmd.Parameters.Add(new OracleParameter("3",
                                       OracleDbType.Varchar2,
                                       companyName,
                                       ParameterDirection.Input));

int rowsUpdated = cmd.ExecuteNonQuery();
connection.Dispose();

还要了解prepared语句:@Jens:嗯,参数化查询比prepared语句更多。但是,是的,避免将值直接放在SQL中是前进的方向。还要了解。@Jens-在公司名称中使用逗号不是为了存储CSV是有正当理由的,许多公司在'Inc'之前都有逗号。@Jens,Inc之前,就像在'Monsters'中一样,Inc.“还了解预处理语句:@Jens:嗯,比预处理语句更参数化的查询。但是,是的,避免将值直接放在SQL中是前进的方向。还要了解。@Jens-在公司名称中使用逗号不是为了存储CSV是有正当理由的,许多公司在“Inc.”之前都有逗号,或者其他任何形式。@Jens,在Inc之前,就像在“Monsters,Inc.”