質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

4317閲覧

SQL文でエラーについて

mohumohu

総合スコア15

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

1グッド

1クリップ

投稿2015/12/29 11:03

今C#を使用して、個別詳細検索機能の実装を行っております。
内容と致しましては、画面で、顧客IDを入力すると顧客の個別情報が
画面に表示される形です。

コーディングをしたのですが、SQL文でコンパイルエラーが出てしまい
困っておりまして、どうすれば、SQL文のエラーがなくなるかお教え頂けますでしょうか。

===================
以下詳細検索機能のソースです。

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Data;

namespace WebApplication1
{
public partial class Syosai : System.Web.UI.Page
{

SqlConnection con = new SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\user\documents\visual studio 2010\Projects\WebApplication1\WebApplication1\App_Data\SyainDB.mdf;Integrated Security=True;User Instance=True");

protected void Page_Load(object sender, EventArgs e)
{

}

protected void Button1_Click(object sender, EventArgs e)
{
con.Open();
//システムの仕組みは、テキストの入力した個別IDが、SyaIDに入り
//個別の情報を検索し、表示する仕組みです。
//以下のSQL文でエラーが出てきております
//エラー内容は引用符が欠けているとのことです。

string SyaID = txtSyaID.Text;
string strSql = "SELECT * FROM Syain WHERE'" + "Sya_ID =" + SyaID ;
SqlCommand cmd = new SqlCommand(strSql, con);
SqlDataReader dr = cmd.ExecuteReader();

while (dr.Read()) { TableRow tRow = new TableRow(); TableCell tCell1 = new TableCell(); TableCell tCell2 = new TableCell(); TableCell tCell3 = new TableCell(); TableCell tCell4 = new TableCell(); tCell1.Text = dr["Sya_ID"].ToString(); tRow.Cells.Add(tCell1); tCell2.Text = dr["Sya_Name"].ToString(); tRow.Cells.Add(tCell2); tCell3.Text = dr["Sya_Syozoku"].ToString(); tRow.Cells.Add(tCell3); tCell4.Text = dr["Sya_Mail"].ToString(); tRow.Cells.Add(tCell4); Table1.Rows.Add(tRow); } dr.Close(); con.Close(); } private void ExecNonQuery(string strSql) { con.Open(); SqlCommand cmd = new SqlCommand(strSql, con); try { int numResult = cmd.ExecuteNonQuery(); } catch (SqlException) { } con.Close(); Response.Redirect("Syosai.aspx"); } }

}

Ken.sakanakana👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

string strSql = "SELECT * FROM Syain WHERE'" + "Sya_ID =" + SyaID ;

WHEREの後ろに余計なシングルコーテーションが書かれています。それと、SyaIDはテキストで入力ということですが、シングルコーテーションで括らなくても大丈夫なのでしょうか。

SQL文が正しく作成されているかどうか、ブレークポイントで止めるなりデバッグメッセージで出力するなりして必ず確認してください。そして、得られたSQL文を、コマンドツールでもGUIツールでもいいですが直接実行して期待通りの結果になるかどうかを確認するということも、場合によっては必要です。

投稿2015/12/29 11:53

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

catsforepaw

2015/12/29 12:46

私もそれは気になりましたが、まずはSQL文を通すことが先決かと思って触れませんでした……。
mohumohu

2015/12/29 12:49

Ken.sakanakanaさん ご指摘及び参考サイトのURLを送って頂き有難うございます! SQL文の基本から、情報セキュリティーに関することまで記載されていて、 大変参考になりました。
mohumohu

2015/12/29 12:59

セキュリティー的にまずいソースですね。現場で開発する際は、プレースホルダー を使用致します。
catsforepaw

2015/12/29 13:15

プレースホルダーは一つの手段ですが、それだけで完結するわけではありません。例えば、SyaIDが英数字のみであれば、SQL文を作る前にチェックしてそれ以外の文字が含まれていたらエラーとして処理を中止するとか、あるいは、不正な文字は入力できないようにUI側で処理するなど、複数の対策を組み合わせることで安全性を確保します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問