C# 从C调用OracleInsert存储过程#
存储过程:C# 从C调用OracleInsert存储过程#,c#,oracle,stored-procedures,C#,Oracle,Stored Procedures,存储过程: CREATE OR REPLACE PROCEDURE insertMovie( p_m_id IN MOVIE.M_ID%TYPE, p_movie_name IN MOVIE.MOVIE_NAME%TYPE, p_year IN MOVIE.YEAR%TYPE, p_category IN MOVIE.CATEGORY%TYPE) IS BEGIN INSERT INTO MOVIE ("M_ID", "MOVIE_NAME", "YEAR", "CA
CREATE OR REPLACE PROCEDURE insertMovie(
p_m_id IN MOVIE.M_ID%TYPE,
p_movie_name IN MOVIE.MOVIE_NAME%TYPE,
p_year IN MOVIE.YEAR%TYPE,
p_category IN MOVIE.CATEGORY%TYPE)
IS
BEGIN
INSERT INTO MOVIE ("M_ID", "MOVIE_NAME", "YEAR", "CATEGORY")
VALUES (p_m_id, p_movie_name,p_year, p_category);
END;
/
这是我创建的将数据插入movie
表的过程。现在我正试着用C#来称呼它。我尝试了以下代码,但它不起作用
在这方面稍有帮助将不胜感激。多谢各位
private void button1_Click(object sender, EventArgs e)
{
dbConnection conObj = new dbConnection();
OracleConnection theConn = conObj.connFunc();
String p_m_id, p_movie_name, p_year, p_category;
p_m_id = movie_id.Text;
p_movie_name = movie_name.Text;
p_year = year.Text;
p_category = category.Text;
OracleParameter parChoiceIn = new OracleParameter();
OracleParameter parDataIn = new OracleParameter();
OracleParameter parOut = new OracleParameter();
parChoiceIn.ParameterName = "p_m_id";
parChoiceIn.OracleType = OracleType.Number;
parChoiceIn.Size = 32;
parChoiceIn.Direction = System.Data.ParameterDirection.Input;
parChoiceIn.Value = p_m_id;
parDataIn.ParameterName = "p_movie_name";
parDataIn.OracleType = OracleType.VarChar;
parDataIn.Size = 32;
parDataIn.Direction = System.Data.ParameterDirection.Input;
parDataIn.Value = p_movie_name;
parDataIn.ParameterName = "p_year";
parDataIn.OracleType = OracleType.Number;
parDataIn.Size = 32;
parDataIn.Direction = System.Data.ParameterDirection.Input;
parDataIn.Value = p_year;
parDataIn.ParameterName = "p_category";
parDataIn.OracleType = OracleType.VarChar;
parDataIn.Size = 32;
parDataIn.Direction = System.Data.ParameterDirection.Input;
parDataIn.Value = p_category;
OracleCommand cmd = theConn.CreateCommand();
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "insertMovie";
cmd.Parameters.Add(parChoiceIn);
cmd.Parameters.Add(parDataIn);
cmd.Parameters.Add(parOut);
theConn.Open();
OracleDataAdapter adapter = new OracleDataAdapter(cmd);
DataSet myset = new DataSet("theResCur");
adapter.Fill(myset);
theGrid.DataSource = myset;
theGrid.DataSource = myset.Tables[0];
theConn.Close();
}
}
您正在创建一个
parOut
参数,但从未初始化它
另外,您将三次重新定义parDataIn
参数,这样一来,OracleCommand
只接收最后定义的参数p_类别
我不明白你在代码的最后部分的意图是什么。如果只想调用存储过程,可能应该尝试以下方法:
private void button1_Click(object sender, EventArgs e)
{
dbConnection conObj = new dbConnection();
OracleConnection theConn = conObj.connFunc();
String p_m_id, p_movie_name, p_year, p_category;
p_m_id = movie_id.Text;
p_movie_name = movie_name.Text;
p_year = year.Text;
p_category = category.Text;
theConn.Open();
OracleCommand cmd = theConn.CreateCommand();
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "insertMovie";
cmd.Connection = theConn;
OracleParameter parChoiceIn = new OracleParameter();
OracleParameter parDataIn = new OracleParameter();
parChoiceIn.ParameterName = "p_m_id";
parChoiceIn.OracleType = OracleType.Number;
parChoiceIn.Size = 32;
parChoiceIn.Direction = System.Data.ParameterDirection.Input;
parChoiceIn.Value = p_m_id;
cmd.Parameters.Add(parChoiceIn);
parDataIn.ParameterName = "p_movie_name";
parDataIn.OracleType = OracleType.VarChar;
parDataIn.Size = 32;
parDataIn.Direction = System.Data.ParameterDirection.Input;
parDataIn.Value = p_movie_name;
cmd.Parameters.Add(parDataIn);
parDataIn = new OracleParameter();
parDataIn.ParameterName = "p_year";
parDataIn.OracleType = OracleType.Number;
parDataIn.Size = 32;
parDataIn.Direction = System.Data.ParameterDirection.Input;
parDataIn.Value = p_year;
cmd.Parameters.Add(parDataIn);
parDataIn = new OracleParameter();
parDataIn.ParameterName = "p_category";
parDataIn.OracleType = OracleType.VarChar;
parDataIn.Size = 32;
parDataIn.Direction = System.Data.ParameterDirection.Input;
parDataIn.Value = p_category;
cmd.Parameters.Add(parDataIn);
cmd.ExecuteNonQuery();
theConn.Close();
}
有错误吗?关于你所经历的更多信息可以帮助那些提供帮助的人。请定义“不工作”。这不应该是
值(:p_m_id,:p_movie_name,:p_year,:p_category)代码>?不能用INSERT语句填充数据集。您必须调用cmd.ExecuteNonQuery(),没有错误,但当我按下insert按钮时,什么也没有发生,我的意思是在oracle表@Bun中没有插入数据