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

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

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

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

SQL Server

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

Q&A

解決済

4回答

11432閲覧

SQL文をLINQ構文に変換したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

SQL Server

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

0グッド

0クリップ

投稿2017/07/20 09:42

編集2017/07/25 02:18

###質問概要
AndroidからASP.netにSQL文を投げ、SQL Serverに問い合わせを行うシステムを考えております。
ASP.netではC#記述によるソースを走らせているのですが、よくC#でデータベース操作を行う際にはLINQを用いると聞いております。

そこで、SQL文をLINQ構文に変換したいと考えているのですが、LINQ構文がSQLに変換されていることを確認する手段は分かっても、その逆の動作に関する情報を得ることができませんでした。もしかしてSQL文はLINQ構文に変換して利用できないのでしょうか。

もし、上記の方法以外に効率の良い方法(AndroidからSQL Serverへの問い合わせ手法)がありましたら、こちらもご教授いただけると幸いです。

ご回答よろしくお願い致します。

###開発環境
マシン:Windows 10
DBMS:SQL Server 2014
Android OS:7.1.1(Nexus 9)
開発言語/IDE:
Android:Java/Android Studio 2.3.2
ASP.net:C#/Visual Studio Community 2017

###追記(2017-07-25)
本件にご回答下さった皆様には感謝申し上げます。
本件に関しましては、セキュリティのご指摘もありましたため、SQLを投げない方針で話を進めて参りたいと考えております。
この度はありがとうございました。

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

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

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

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

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

guest

回答4

0

ベストアンサー

必要としないから存在しないのでしょう。

データベースに問い合わせるのはSQLしかありません。
しかし、C#のコード上では、SQLは、ただの文字列でしかありません。
C#のコードとSQLが混在すると、SQLにインテリセンスが機能せず、開発効率が下がります。
この問題の解決のために、LINQを使うということです。
C#のコードのみで、クエリ処理ができる様になります。

そのため、わざわざ、SQLからLINQに変換しません。
LINQからSQLを出力できるのは、動的に作っているので、最適なSQLを発行しているのかを確認するためです。
また、複雑なSQLの場合、LINQを使わず、そのままSQLを実行させることもします。

LINQは、用語をSQLに寄せているので、SQLからLINQにするのは、なれると、それほど難しくないと思います。

投稿2017/07/20 11:17

kiichi54321

総合スコア1984

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

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

退会済みユーザー

退会済みユーザー

2017/07/25 02:04

ご回答ありがとうございます。 わざわざ開発効率を下げる手法を取るところでした。感謝申し上げます。
guest

0

C#でデータベース操作を行う際にはLINQを用いると聞いております。
SQL文はLINQ構文に変換して利用できないのでしょうか

投げるSQLによりけりですよ
でも既にSQLが書けているのだったらそれを使ったほうがいい
SQLServerに対してLINQだと効率が悪いことの方が多いですよ
個人的には、捨て書きのDBの問い合わせにはLINQ(というよりEntityFrameworkですが)を使いますが、ちゃんとしているところにはちゃんとSQL(MicroORMのひとつのdapperを噛ませますが)で問い合わせして、結果をオブジェクトに変換してからLINQ(この場合はLINQtoObjectになるんですかね)を使います

そもそもLINQなんてLanguage INtegrated Queryの名の通り、いろいろなデータソースに対して同じような方法で処理(問い合わせ)ができますよってのがメリットで、SQLServer(SQL)に特化しているならSQLを使ったほうが効率がよいのは言うまでもない
SQL覚えるのめんどくせぇ、VisualStudioでDBの問い合わせにもインテリセンスが効いてくれなきゃイヤだ的なアプローチだと言っても過言ではない(はず

AndroidからASP.netにSQL文を投げ、SQL Serverに問い合わせを行うシステムを考えております。

だったらそのまま実装した方がいいですね
本当にAndroid側でSQLを生成して投げるのならですが..
よくある形としてなら

  • AndroidからWebAPIにアクセスさせる
  • WebAPIからSQLServerに問い合わせさせる
  • SQLSeverからの結果をWebAPIがJSON(もしくはXML)でAndroidに返す

みたいな感じではないでしょうか

投稿2017/07/20 10:50

dojikko

総合スコア3939

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

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

x_x

2017/07/20 13:31

非同期構文も簡単に書けるし、SQLがわかれば不要ってわけでもないと思いますがね。セキュリティ上SQL直書きを許していないところもあります。
退会済みユーザー

退会済みユーザー

2017/07/21 01:03

質問文の「AndroidからASP.netにSQL文を投げ」というところから普通に考えると、SQL 文とか LINQ が関係するのはサーバー側だけの話で、回答の「投げるSQLによりけりですよ でも既にSQLが書けているのだったらそれを使ったほうがいい」というのは少なくとも Android は関係ないと思いますけど。どういう意図の回答ですか。
guest

0

Web アプリの仕組みを理解されてないように思えます。

AndroidからASP.netにSQL文を投げ、SQL Serverに問い合わせを行うシステムを考えております。

Android からはブラウザで ASP.NET Web アプリにアクセスして DB から情報を入手するのだと理解していますが、その理解でいいですか?

それとも、ブラウザではなくて、質問者さんが作成する Android アプリから http 通信を行い(.NET の HttpClient を使ったアプリのように)、ASP.NET Web アプリにアクセスして DB から情報を入手するのでしょうか?

そうであれば、どちらにしても、「AndroidからSQL Serverへの問い合わせ手法」を考える必要は全くないです。

「SQL Serverへの問い合わせ手法」が関係あるのは ASP.NET Web アプリです。なので、そこ(サーバー側)では linq とか sql とか言う話が出てきます。

しかし、クライアント側(Android)は全く何の関係もないです。

Android 側からは ASP.NET Web アプリに対して HTTP GET 要求や POST 要求などを出して、ASP.NET Web アプリから返ってくる HTTP 応答を処置するということになります。そこに linq とか sql とかは出てきません。

一方、サーバー側(ASP.NET Web アプリと DB サーバー)では「SQL Serverへの問い合わせ手法」と言う話は関係あります。

ASP.netではC#記述によるソースを走らせているのですが、よくC#でデータベース操作を行う際にはLINQを用いると聞いております。

誰からそういう話を聞いたのか分かりませんが、C# のアプリは linq を使うとは限らないです。

Visual Studio に備わっているデザイナ、ウィザードを使った場合、Web Forms アプリでは従前の ADO.NET + SQL 文、MVC では Entity Framework + Linq to Entity が主流になります。

投稿2017/07/21 00:55

編集2017/07/21 01:08
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kurokoba

2017/07/21 09:05

(勝手に補足)「AndroidからASP.netにSQL文を投げ」って本当に言ってるとおりの内容なら危険なのでやめた方がいいです。ここでいってる"Android"が特殊な専用端末ならありえない話でもないが、それでも悪手。
退会済みユーザー

退会済みユーザー

2017/07/21 10:03

私は「本当に言ってる通り」とは全く思ってない(Android ⇒ ASP.NET アプリ ⇒ DB サーバーの構成で、Android から SQL を投げるなんて有り得ないと思っています)ので上のようなレスをしています。 私にではなく、他の回答者 3 方に言ってください。
退会済みユーザー

退会済みユーザー

2017/07/25 02:03

ご丁寧なご回答ありがとうございます。 大筋を理解できていなかったのは全く私の勉強不足でした。ご指摘並びにご教授頂き、感謝致します。
guest

0

検索ワード:android ms sql server connection
これからのMSに期待するしかないねぇえ、という現状が解る筈です。

以下独断と、偏見が入っています。

.Net でDBを扱う場合、私の場合には、
Provider factory class を自前で実装して、
(内容にもよりますが、2~5百行程度で、ODBC/OLEDB/MSSQL Native/ちょっと工夫で、MySQLやODP.NET に対応できます。)
⇒クラスとオブジェクトの恩恵を実感できます。

Linq の使用を否定するわけではありませんが、Linq は別概念と思った方がいいです。
何よりも、SQLを知っている方には、変態的で、データ型に対する処置に疑問がでるかも。
⇒コンバーターを作るという事を考える必要が無い実装をした方が良いはずでは?
SQLとて、方言だらけですし、接続方法により、接続種別毎の方言がでてきたり。

WEB API や、WCF レベルの実装を考えた方が良いかもしれません。

投稿2017/07/20 10:51

daive

総合スコア2028

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

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

退会済みユーザー

退会済みユーザー

2017/07/25 02:10

ご回答ありがとうございます。 今回は環境制約上、SQL Serverを利用せざるを得ない状況で私自身の技術力も皆無に等しいので、Class実装は見送りたいと思います。また、他の回答者様のご意見も参考にしつつ、今回はLINQを利用してみようかと考えておりますので、今後同様の開発の機会がありましたら、本回答も取り入れることを視野に入れてまいります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問