2016-11-10 11 views
0

関数の戻り値をテキストボックスに入力していますが、関数内でsqlコードを実行すると機能しません。私はSQL関連のコードを削除することができ、それは動作します。だから私は困惑している。SQLを使用している場合、関数の戻り値は機能しません

「機能しません」とは、テキストボックスに何も入力されないことを意味します。それは空白のままです。

おかげ

public string CreateResident() 
{ 
    string result = "hmm"; 
    SqlConnection sqlConnection = new SqlConnection("Server=DELLXPS\\SQLEXPRESS; Initial Catalog=Warren_SEINDATASYSTEMS; Integrated Security=true;"); 
    SqlCommand cmd = new SqlCommand(); 

    cmd.CommandText = "INSERT INTO [dbo].[NewUsers]([ResidentAccountNumber],[ResidentName],[ResidentAddress],[NumberOfVisitors],[TempPass],[Role])VALUES(@ResidentAccountNumber,@ResidentName,@ResidentAddress,@NumberOfVisitors,(select cast((Abs(Checksum(NewId()))%10) as varchar(1)) + char(ascii('a')+(Abs(Checksum(NewId()))%25)) + char(ascii('A')+(Abs(Checksum(NewId()))%25)) + left(newid(),5)),'resident')"; 
    cmd.CommandType = CommandType.Text; 
    cmd.Connection = sqlConnection; 

    SqlParameter ResidentAccountNumber = new SqlParameter(); 
    ResidentAccountNumber.ParameterName = "@ResidentAccountNumber"; 
    ResidentAccountNumber.Value = txtboxResidenetAccountNumber.Text.Trim(); 
    cmd.Parameters.Add(ResidentAccountNumber); 
    SqlParameter ResidentName = new SqlParameter(); 
    ResidentName.ParameterName = "@ResidentName"; 
    ResidentName.Value = txtboxResidentName.Text.Trim(); 
    cmd.Parameters.Add(ResidentName); 
    SqlParameter ResidentAddress = new SqlParameter(); 
    ResidentAddress.ParameterName = "@ResidentAddress"; 
    ResidentAddress.Value = txtboxResidentAddress.Text.Trim(); 
    cmd.Parameters.Add(ResidentAddress); 
    SqlParameter NumberOfVisitors = new SqlParameter(); 
    NumberOfVisitors.ParameterName = "@NumberofVisitors"; 
    NumberOfVisitors.Value = txtboxNumberOfVisitors.Text.Trim(); 
    cmd.Parameters.Add(NumberOfVisitors); 


    try 
    { 
     sqlConnection.Open(); 
     result = (string)cmd.ExecuteScalar(); 
     sqlConnection.Close(); 
    } 
    catch (Exception ex) 
    { 
     result = ex.Message; 
    } 

    return result; 
} 

protected void btnCreateResident_Click(object sender, EventArgs e) 
{ 
    txtboxTempPassword.Text = CreateResident(); 
} 
+0

を、あなたは例外を得るのですか? –

+0

関数内ではどういう意味ですか?どこでエラーが発生し、どのようなエラーですか? –

+0

結果を読み取るにはSqlDataReaderが必要です。 –

答えて

0

あなたのSQLが間違っている、あなたは多くの問題を持っていますが、私はあなたのコードをより読みやすくする方法を示したいと思います。このようにそれをフォーマット:

cmd.CommandText = @"INSERT INTO [dbo].[NewUsers] ([ResidentAccountNumber],[ResidentName],[ResidentAddress], NumberOfVisitors],[TempPass], Role]) 
        VALUES(
         @ResidentAccountNumber, 
         @ResidentName, 
         @ResidentAddress, 
         @NumberOfVisitors, 
         (select cast((Abs(Checksum(NewId()))%10) as varchar(1)) + char(ascii('a')+(Abs(Checksum(NewId()))%25)) + char(ascii('A')+(Abs(Checksum(NewId()))%25)) + left(newid(),5)), 
         'resident')"; 
cmd.CommandType = CommandType.Text; 
cmd.Connection = sqlConnection; 

私たちは、それが一つの問題であるので、VALUESコンストラクタで選択が合法ではないことを知っています。

また、コードが正しくコピーされていませんでした。

ExecuteScalarを使用しています - それが何をしているのか分かりますか? INSERTクエリを含むクエリは含めないでください。

おそらく、ストアドプロシージャが必要だと思います。

+0

ありがとうございます。残念ながら、私はそれが何を意味するのか分かりません。 IV DataReaderを使用してい(この問題を解決することに切り替える。スケーラーiは、次のされた一例に過ぎない。 – birddseedd

0

私はC#コードでクエリを記述しないことをお勧めします。同じ目的でストアドプロシージャを使用する必要があります。 クエリでID、主キーまたは何らかの値が返されるようにするには、挿入クエリの後にそのクエリを記述する必要があります。 テーブルからIDを返す場合は、選択クエリで次のキーワードを使用できます。

SCOPE_IDENTITYは、同じスコープ内のIDENTITYカラムに挿入された最後のIDENTITY値を返します。

IDENT_CURRENTは、セッションおよびスコープ内の特定のテーブルに対して生成された最後のID値を返します。

@@IDENTITYは、現在のセッション内のテーブルに対して生成された最後のID値をすべてのスコープにわたって返します。

レコードを1つだけ返却する場合は、ExecuteScalarを使用してください。ExecuteReaderを使用することができます。

唯一の目的は、テーブルにデータを挿入することであれば、ExecuteNonQueryを使用する必要があります。

+0

のExecuteReaderに切り替えると、クエリで私が探していた結果をOUTPUTを与えた使用。 – birddseedd

+0

更新あなたの質問に答え –

+0

と@ viveknuna - 答えを使って質問を更新することは、SOの仕組みではありません。 – Hogan

0

私はExecuteScalerの代わりにExecuteReaderとコメントしました。そして、値

INSERT INTO [table] ([fields]) OUTPUT Inserted.MyColumn VALUES(values) 

C#コードを返すためにステートメントを変更:

reader = cmd.ExecuteReader(); 
    try 
    { 
     while (reader.Read()) 
     { 
      result = reader[0].ToString(); 
     } 
    } 
    catch (Exception ex) 
    { 
     result = ex.Message; 
    } 

    return result; 
関連する問題