MVC3 ASP を使用しており、ルートとして MYSQL DB にログインするように web.config ファイルを構成しました。私はうまく接続できる多くのストアドプロシージャを作成しました。私は今、このログインユーザーをtempuserと呼ばれるパブリックユーザーに変更し、rootではなくなりたいと考えています。
ただし、ログイン ユーザーを "root" から "tempuser" に変更すると、エラーが発生します: タイプ 'System.DBNull' のオブジェクトをタイプ 'System.String' にキャストできません
ExecuteNonQuery() の実行時に上記のエラーが発生します。
関数へのアクセスを許可しました: GRANT EXECUTE ON FUNCTION check_user_exists to tempuser@'%';
また、関数が使用するものにアクセスするこのテーブルで「選択」と「更新」を許可しました。tempuser として mysql コマンド ラインにログインし、問題なく関数を手動で呼び出すことができます。しかし、ExecuteNonQuery() を実行すると、上記のエラーが発生します。現在、Visual Web Developer 2010、Razor Engine、MVC3 を使用しています。
助けてください。
私は運が悪いので、何週間も試みてきました。
実行中のコードは次のとおりです。ExecuteScalar() 関数がエラーの場所です。エラーはこの質問の主題です: ただし、「ルート」ユーザーとしてログインすると、エラーは発生しません。
[HttpPost]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
DBController dbcontroller = new DBController();
if (dbcontroller.DBConnection())
{
MySqlCommand command = new MySqlCommand("check_user_exists_signup", dbcontroller.conn);
command.CommandType = System.Data.CommandType.StoredProcedure;
// Add parameters for the check_user_exists_signup STORED FUNCTION
command.Parameters.Add(new MySqlParameter("@userName", model.UserName));
command.Parameters["@userName"].Direction = System.Data.ParameterDirection.Input;
// RETURN parameter for the insert_users STORED FUNCTION
MySqlParameter cnt_user = command.Parameters.Add("@cnt_user", MySqlDbType.Int32);
command.Parameters["@cnt_user"].Direction = System.Data.ParameterDirection.ReturnValue;
try
{
command.ExecuteScalar();
object ret = command.Parameters["@cnt_user"].Value;
dbcontroller.conn.Close();
ストアド プロシージャは次のとおりです。
CREATE DEFINER=`root`@`localhost` FUNCTION `check_user_exists_signup`(
userName varchar(20)) RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE cnt_user int;
select count(*) into cnt_user
from users
where user_name = userName;
RETURN cnt_user;
END