ADODB Stream of binary file fails to write from SQL Azure - sql-server

We have a Planned Maintenance System which stores and retrieves documents in a SQL database from an Access front end using ADODB Stream and SQL server authorisation. All works happily with a local database, but with SQL Azure the download fails. The connection opens OK but I get "Write To File failed, run time error 3004".
The same code works to the same location from a local server, so it's a permissions issue.
I've tried various locations for the file on the C drive, have given the folder all the permissions I can find and turned off the Firewall and Virus scanner.
Despite searching the internet for ages, I can't find what I need to do to allow the file to be streamed from a SQL Azure server that's not using active directory.

Inevitably there was a tiny difference in the code between the local and Azure versions revealed by ProcMon. Fixed.

Related

SSIS cannot access folder which everyone has access to

So we have a network address lets call it the Z drive that everyone has access to.
By everyone I mean the entire organization. For completeness, I actually went ahead and gave access to the actual SQL Server Agent.
The package runs fine on dev, but always fails with
The directory "Z:\SSIS_Test" does not exist
At first, I thought it was an issue of access. But how can't the SQL Server Agent access an everyone drive?
Also, I went in and run the package on the server myself as the caller and it still failed with same error. What gives? Am I not getting something?
Possible solutions
(1) Granting service accounts
Try giving read/write permissions to the SQL Database Engine Service account NT SERVICE\MSSQL$<Instance Name> and NT SERVICE\SQLSERVERAGENT (Where <Instance Name> should be replaced by the installed instance name):
Configure File System Permissions for Database Engine Access
I was facing the same issue, it looks like the "everyone" permission does not take into consideration service accounts (I am not sure). The issue was solved after granting the database engine and SQL agent service accounts. Also feel free to read more about SQL Server service account in the following documentation:
Configure Windows Service Accounts and Permissions
(2) Mapping drive within SQL Server
You can refer to the following article for more information:
Make Network Path Visible For SQL Server Backup and Restore in SSMS
Or you can try to use the full UNC path instead of the mapped drive.
If these solutions didn't worked, there are many other suggestions listed in the following answer, you can check it for more information:
SSIS File System Task Error while copying files between servers

How can I remotely connect to my MS SQL Server DB which is being hosted on a Windows Host?

I just created my Microsoft SQL Server Database on my own laptop and then made a backup file of it.
Then inside my Windows Host (Which I've bought from 1and1) I uploaded the .back file and then imported it to the newly made database.
Up to here everything was good. But when I try to connect to my database from my Visual Studio's ADO.NET Entity Data Model Wizard's Connection Settings window I get the following error:
I searched a lot online but unfortunately all solutions were for Windows Server or Local Computers While my Database is stored on a Windows host.
My connection settings can be seen in the image below:
I also called 1and1 support to ask whether my database's remote port is open or not, but the client couldn't get what I mean.

vs 2017 entity core 2 not using the right data directory

experiencing an odd issue I've yet to see on any of my other machines. This is a fresh laptop, so I have installed VS 2017, SQL Server 2017 express, then created a quick sample project using one of the stock .net core projects (with authentication stored "in-app"). This, of course, creates some basic entity migrations and DB context.
When I run I'm getting access denied errors. So, of course, I checked SQL service default user which is an admin. I then run basic migration commands and receive this
So, of course, my next step was to double check the default data locations of SQL since it appears to be trying to store it in C:\Users root?! I have never had to bother touching this during install, but worth a look. And of course, they are as I expected in their default locations of C:\Program Files\ etc
Rapidly running out of things to try at this point - and considering this is a fresh windows 10 install, with bare-bones vs 2017 and SQL express 2017 it feels a lot like a bug here. Everything is a default if you were to File -> New Project -> .NET Core Web Application with INdividual accounts.
Anyone have any thoughts or things worth trying? Why is it trying to store my DB in C:\Users? Connection string -
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-WebApplication3-53bc9b9d-9d6a-45d4-8429-2a2761773502;Trusted_Connection=True;MultipleActiveResultSets=true"
Thanks!
-Marc
You are not using SQL Server Express.
The local string says (localdb), which is the SQL Server engine running in user space. This is a big difference. Usually SQL Server or SQL Server express runs as service. (localdb) is not an alias for localhost (loopback address). It's a special name for a minified version of SQL Server which runs in user space.
When SQL Server runs as a service, it needs to have read/write permissions to the folder it writes. This is usually NOT THE CASE when the file is located within the User folder.
LocalDB on the other side, is always started when you start debugging your application and runs with the permissions of the user. So if your file was created by an admin user or outside of a directory you have write permissions.
Also, when you mount a database to SQL Server (Express), then the file is protected from write access to other applications, so LocalDB can't open it neither.
LocalDB is made for development to offer most of the SQL Server features but without all the hard setup and permanently running service in the background.
Essentially you have two options:
Use the SQL Server connection string as #TanvirArjel suggested
Detach the database from SQL Server express, copy it to your user folder (C:\Users\<myusername>\) and then correct the path to it
Then it should just work.
Notice that LocalDB is not meant to run in production, so you will likely experience issues when trying to run it in IIS (IIS Express and Console applications and WPF work fine).
Reasons for LocalDb not working with IIS is because ASP.NET (Core) applications within IIS run with a special user, but LocalDbs are always created in the users profile folder. Now, the accounts used by IIS don't have a profile and can't create the database and can't access any database outside (since localDbs are stored in user folder only the user who created it has access to it).
Here some source on it and the reasons behind it.
Using LocalDb with IIS
Write the connection string as follows.Hope it will work...
"DefaultConnection": "Server=YourPcName\\SQLExpressInstanceName;Database=aspnet-WebApplication3-53bc9b9d-9d6a-45d4-8429-2a2761773502;Trusted_Connection=True;MultipleActiveResultSets=true"

How to configure Azure File Storage to access from Windows Service

We are developing and SSIS service to import some data in Excel and CSV files in Azure. For uploading the files we have chosen Azure File Storage and we are running the SSIS packages on a VM. For picking up the files from file storage, we have mapped the File Storage as mapped network drive on the VM. This works file when we manually trigger the SSIS jobs. However, this fails when running as SQL Server Agent job. As far as I understand, the mapped drives are per user and they do not work for service account used for SQL Server Agent. Is there a way by which we can access the file storage in SSIS packages as SQL Agent Jobs?
I found this page but this is for basic windows network file sharing. Does not work for us as we also need to use the Shared Access Key for Azure File Storage.
I solved the problem using this solution.
Add credential via cmd not via the GUI

Get list of Drives and Directories on a remote machine with SQL Server installed

One of our apps uses SQl Server databases as backend. I am making a utility that allows making the backup of relevant databases using the App's API.
I noticed that for SQl Server databases that are hosted on server, I need to specify the local path on that server or a UNC path pointing to that server where sufficient rights are provided. Instead I want to get a list of available Drives and Subdirectories on the Windows Server( or remote machine in the domain) in a form view where I should be able to select the local path to save the backups, by providing the name of the machine. I found a link to sample project but its little old and not working for me.
http://www.codeproject.com/Articles/17600/MSSQL-MSDE-Server-Folder-Browser?msg=5052896#xx5052896xx
I was wondering if someone can help me in making above code work?
Thanks.

Resources